Seite 1 von 1
tabelle in 2D Liste (Array)
Verfasst: Mittwoch 22. März 2006, 19:51
von keboo
Hallo!
Bins schon wieder!
Wie kann ich am effektivsten eine Tabelle die ich in einem File gegeben habe in eine 2D Liste bringen?
Tabellesiet so aus beispielsweise:
Code: Alles auswählen
Spalte1 Spalte2 Spalte3 Spalte4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
#
danke für eure hilfe,
johannes
Verfasst: Mittwoch 22. März 2006, 19:54
von mitsuhiko
Code: Alles auswählen
tabelle = []
for line in file('meinetabelle.txt'):
parts = line.split()
tabelle.append([p.strip() for p in line.split()])
print tabelle
Hilft dir das?
Verfasst: Dienstag 25. April 2006, 09:38
von keboo
Hallo!
Ich hab nun folgende Tabelle:
Code: Alles auswählen
80.6 1.612 39.420 0.3120 1.5320 4.7300 [all info available] 0. 1.0
80.6 1.612 39.420 0.3120 1.5320 3.7300 [all info available] 0. 1.0
83.9 1.714 63.160 2.1369 1.3288 2.1336 [all info available] 0. 1.0
76.4 1.714 63.160 2.1369 1.3288 1.1336 [all info available] 0. 1.0
31.3 1.800 37.683 17.7897 0.7563 1.2997 [all info available] 0. 1.0
31.5 1.800 37.683 17.7897 0.7563 1.2997 [all info available] 0. 1.0
31.5 1.800 37.683 17.7897 0.7563 1.2997 [all info available] 0. 1.0
80.9 2.640 11.180 18.1656 1.0159 1.9906 [all info available] 0.
Die Infos innerhalb der eckigen Klammern sollen in ein Feld der 2D Liste. Wie kann ich am effektivsten das Skript von Blackbird anpassen?
Danke,
Johannes
Verfasst: Dienstag 25. April 2006, 11:21
von modelnine
Das ist keine triviale Aufgabe, da Leerzeichen "escaped" werden können in Deinem Format. Dafür brauchst Du einen richtigen Tokenizer. Kannst Du die Daten nur in diesem Format kriegen? Oder geht zum Beispiel auch irgendein CSV-Dialekt? Das ist erheblich einfacher zu bearbeiten, da Python CSV-Lexer mitbringt. Sonst, probier mal folgendes (quick and dirty):
Code: Alles auswählen
from re import compile
NORMAL = compile("^[^\\[][^ ]*")
DATA = compile("^\\[([^\\]]*)\\]")
lines = []
for line in file("meinetabelle.txt"):
linedata = []
line = line.lstrip()
while line:
m = NORMAL.match(line)
if m:
linedata.append(m.group(0))
line = line[len(m.group(0)):].lstrip()
continue
m = DATA.match(line)
if m:
linedata.append(m.group(1))
line = line[len(m.group(0)):].lstrip()
else:
# Sollte _eigentlich_ nie passieren wenn das Format strikt eingehalten wird.
raise ValueError("Irgendwas seltsames...")
lines.append(linedata)
print lines
Verfasst: Dienstag 25. April 2006, 12:06
von keboo
Hi!
Danke für den Tipp mit .csv .
Wie kann ich meine Tabelle am schnellsten ins .csv Format bringen?
Lg
Johannes
Verfasst: Dienstag 25. April 2006, 12:16
von modelnine
Du kannst eine Tabelle ins CSV-Format kriegen, indem das Programm, das die Tabelle erstellt, es in ein CSV-Format schreibt, nur da kann ich Dir, da ich weder weiß wo die Ausgabe herkommt, noch sonst was, nicht helfen.
Sonst, wenn Du das in Python machen mußt (weil das Programm das nicht kann), dann kannst Du auch gleich den rudimentären Lexer nehmen den ich geschrieben hab, denn es erst ins CSV-Format zu konvertieren, und dann in Python einzulesen, ist Käse.
Verfasst: Dienstag 9. Mai 2006, 09:33
von keboo
Hallo Leute!
Kann mir kurz wer sagen was der Code von Modeline macht?
Code: Alles auswählen
NORMAL = compile("^[^\\[][^ ]*")
DATA = compile("^\\[([^\\]]*)\\]")
Ist mir ein wenig zu kryptisch
Lg
johannes
Verfasst: Dienstag 9. Mai 2006, 15:21
von mitsuhiko
keboo hat geschrieben:Hallo Leute!
Kann mir kurz wer sagen was der Code von Modeline macht?
Klar
Matcht ZEILENANFANG, ZEILENANFANG_ODER_ECKIGE_KLAMMER_AUF, dann ALLES_BIS_AUF_LEERZEICHEN, wobei das null oder mehr Zeichen lang sein kann.
Match ZEILENANFANG, ECKIGE_KLAMMER_AUF, ALLES_BIS_AUF_ECKIGE_KLAMMER_ZU, und das wieder null oder mehr Zeichen lang.
Verfasst: Mittwoch 10. Mai 2006, 08:56
von keboo
Danke blackbird!
lg johannes