tabelle in 2D Liste (Array)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Mittwoch 22. März 2006, 19:51

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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Mittwoch 22. März 2006, 19:54

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?
TUFKAB – the user formerly known as blackbird
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Dienstag 25. April 2006, 09:38

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
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 25. April 2006, 11:21

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
--- Heiko.
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Dienstag 25. April 2006, 12:06

Hi!

Danke für den Tipp mit .csv .
Wie kann ich meine Tabelle am schnellsten ins .csv Format bringen?

Lg
Johannes
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 25. April 2006, 12:16

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.
--- Heiko.
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Dienstag 9. Mai 2006, 09:33

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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Dienstag 9. Mai 2006, 15:21

keboo hat geschrieben:Hallo Leute!

Kann mir kurz wer sagen was der Code von Modeline macht?
Klar :-)

Code: Alles auswählen

NORMAL = compile("^[^\\[][^ ]*")
Matcht ZEILENANFANG, ZEILENANFANG_ODER_ECKIGE_KLAMMER_AUF, dann ALLES_BIS_AUF_LEERZEICHEN, wobei das null oder mehr Zeichen lang sein kann.

Code: Alles auswählen

DATA = compile("^\\[([^\\]]*)\\]")
Match ZEILENANFANG, ECKIGE_KLAMMER_AUF, ALLES_BIS_AUF_ECKIGE_KLAMMER_ZU, und das wieder null oder mehr Zeichen lang.
TUFKAB – the user formerly known as blackbird
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Mittwoch 10. Mai 2006, 08:56

Danke blackbird!

lg johannes
Antworten