Auslesen von Tabellen mit Python

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
TrickBen

Hallo,
ich habe ein Problem,
im Zuge einer zu verfassenden Arbeit muss ich eine CSV Tabelle (mit vielen Tausenden
Einträgen) mit Python auslesen können, dass Format der Tabelle lässt sich ja an sich recht
universell ändern. Jedoch fehlt mir die nötige Erfahrung und Intelligenz, ein Modull zu
verwirklichen, dass diese Arbeit übernimmt.
Daher nun die Frage an euch,
hat schon mal jemand etwas ähliches Programmiert oder kann mir auf die Sprünge helfen?

Schonmal im Voraus Danke
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

TrickBen hat geschrieben: ...im Zuge einer zu verfassenden Arbeit muss ich eine CSV Tabelle (mit vielen Tausenden
Einträgen) mit Python auslesen können...
...hat schon mal jemand etwas ähliches Programmiert oder kann mir auf die Sprünge helfen?
Viele Leute haben sowas schon öfter programmiert. Standardsuchort für Python-Module ist http://www.vex.net/parnassus , scheint aber gerade down zu sein. Aber selbst wenn Du bei google mal 'Python' und 'CSV' eingibst, bekommst Du viele Links zu entsprechenden Modulen präsentiert.

Falls Du es doch selber machen willst, melde Dich noch mal.

Jörg
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Mal wieder meine Erfahrungen aus Delphi. Da geht soetwas ganz einfach mit TStrings.

In QT gibt es QStringList, welche eine ähnliche Funktion drin hat.

Code: Alles auswählen

QStringList::split ( const QString & sep, const QString & str, bool allowEmptyEntries = FALSE )
sep = Seperator, z. B. ','
str = zu zerlegender String
allowEmptyEntries = leere Felder (zwei aufeinander folgende Kommas) sind nicht erlaubt
kann eine aus einer Datei gelsene Zeile in die einzelnen Felder zelegen.

Hans
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
hans hat geschrieben:QStringList::split (
Wenn aber QStringList::split() ähnlich simpel gestrickt ist, wie string.split(), hilft das bei CSV-Dateien nicht viel, da Daten in Anführungsstrichen Kommata enthalten können, die string.split() gnadenlos als Trenner interpretiert.

Jan
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Voges hat geschrieben: Wenn aber QStringList::split() ähnlich simpel gestrickt ist, wie string.split(), hilft das bei CSV-Dateien nicht viel, da Daten in Anführungsstrichen Kommata enthalten können, die string.split() gnadenlos als Trenner interpretiert.
Ich muß dir leider recht geben. Ich hatte bis zur Stunde QStringList noch nicht ausprobiert. Jetzt weiß ich, dass es so nicht geht. Aber es müßte doch ein leichtes sein, eine Textzeile einzulesen, und diese Byte für Byte zu untersuchen. Das erste Anführungszeichen schaltet die Trennung bei Komma aus, das zweite Anführungszeichen wieder zu.

Wie sieht die Regel eigentlich aus, wenn Textfelder Anführungszeichen enthalten?

Und was macht Ihr bei deutschen Computern mit 1,2? Das soll eine Dezimalzahl sein. Die Amis haben es da mit 1.2 leichter.

Hans
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
hans hat geschrieben:Wie sieht die Regel eigentlich aus, wenn Textfelder Anführungszeichen enthalten?

Und was macht Ihr bei deutschen Computern mit 1,2? Das soll eine Dezimalzahl sein.
Wohl die wichtigsten Regeln:
- Enthält ein Datenfeld ein Komma, wird das Datenfeld in Anführungszeichen eingeschlossen.
- Enthält ein Datenfeld ein Anführungszeichen (als Teil der Daten), wird diesem Anführungszeichen ein weiteres Anführungszeichen vorangestellt und das Datenfeld in Anführungszeichen eingeschlossen. Beispiel

Code: Alles auswählen

aus   1 1,34    2342    wird    1,"1,343",2342
aus   3 abc"def 5432    wird    3,"abc""def",5432
Es gibt einige CSV-Module für Python. http://object-craft.com.au/projects/csv/ sieht z.B. ganz gut aus.
Jan
Antworten