Seite 1 von 2

Verfasst: Donnerstag 23. September 2004, 18:28
von Mawilo
Hallo Milan,

gibt es zu diesem Modul eine brauchbare Beschreibung in deutsch?


Stephan

Verfasst: Donnerstag 23. September 2004, 18:49
von Milan
Hi. Auf die schnelle: nein, fällt mir nix ein... aber du kannst ja selber mal suchen bzw dir den Thread durchlesen. Da ist unter anderem ein Anwendungsbeispiel mit drin, vielleicht hilft dir das beim verstehen. Grundprinzip ist, dass ein Fileobj einer Readerklasse übergeben wird. Diese Readerklasse kann als Argument zu for-schleifen genutzt werden, wobei dann immer die einzelnen Werte als Liste genutzt werden können. Eine Datei, in der das hier steht:

Code: Alles auswählen

1,2,3
4,5,6
"aha, aha","lalala",xyz
kann dann so behandelt werden:

Code: Alles auswählen

import csv
f=file(...)
reader=csv.reader(f) # kein Dialekt, wie bei Exel notwendig wäre, hier werden "," verwendet
for werte in reader:
    print repr(werte)
f.close()
Selbst das Komma in Anführungszeichen wird korrekt geparst, da es als Teil des Strings und nicht als Trennzeichen angesehen wird.

Verfasst: Donnerstag 23. September 2004, 19:43
von joe
Milan hat geschrieben:

Code: Alles auswählen

reader=csv.reader(f) # kein Dialekt, wie bei Exel notwendig wäre, hier werden "," verwendet
Bei Stephans ssv-dateien (semicolon separated values) ginge das dann so:

Code: Alles auswählen

reader = csv.reader(f),delimiter=';')
Aber helfen tut ihm das alles nix, denn mit seinen kaputten dateien wird das csv-modul genauso wenig klar kommen.
joe

Verfasst: Donnerstag 23. September 2004, 22:01
von Milan
Hi. Das glaubeich nicht so ganz... ich hab zwar das hier überlesen:
Stephan hat geschrieben:... da liegt der Hase im Pfeffer

In der csv-Datei werden verschiedene Zeilen (die sehr lang sind) gebrochen (mit "\n"). Dadurch ist dann eine Zeile nur 11 Elemente lang (da es nur der Rest der vorhergehenden Zeile ist).

Ist natürlich ziemlich doof von Excel. :o
Aber das Notepad die Zeilen orginalgetreu einließt gibt mir zu denken:
Stephan hat geschrieben:... mit WordPad oder einem anderen Texteditor öffne, habe ich Zeilenumbrüche. Nur wenn ich die Datei mit NotePad öffne, sind die Zeilen komplett.
Ich vermute, da ist ein Teil der Daten binär gespeichert wurden, sodass da ein Fehler liegt (es wäre sehr nützlich, die Datei mal in binärer Repräsentation ausschnittsweise zu sehen). Selbst wenn das so sein sollte, kann er mit csv aber schon mal den Dialekt genau spezifizieren. Am besten wäre es vielleicht einmal zu testen, was er ohne Dialekt sagt, denn csv verwendet einen Sniffer, der versucht auszukunden, was für ein Dialekt vorliegt. Eventuelle gibt es Probleme mit den Zeilenumsprüngen (binär halt).

Ansonsten könnte es helfen, die Zeilenumsprünge rauszunehmen und immer neu nach 37 ";" einzusetzen.

Verfasst: Sonntag 26. September 2004, 12:43
von Mawilo
Hallo Milan,

ich habe mich mal etwas mit der csv-Datei beschäftigt.
Das Problem ist, dass in der xls-Datei in einigen Zellen Text mit Zeilenumbruch eingegeben ist. Ich kann zwar die Formatierung ändern indem ich in Excel das Häkchen bei Zeilenumbruch entferne, aber in der Bearbeitungsleiste wird der Text immer noch in zwei Zeilen angezeigt. Dieser Zeilenumbruch führt in der csv-Datei zu einer neuen Zeile.


Stephan

Verfasst: Sonntag 26. September 2004, 13:13
von joe
Stephan hat geschrieben: Das Problem ist, dass in der xls-Datei in einigen Zellen Text mit Zeilenumbruch eingegeben ist.
Die texte mit zeilenumbrüchen sind dann aber (zumindest bei mir) in anführungsstrichen eingeschlossen. Und damit kommt das csv-modul tatsächlich auch klar.
joe

Verfasst: Sonntag 26. September 2004, 14:24
von Mawilo
Hi Joe,

bei mir werden die Zeilenumbrüche auch von Anfürungsstrichen eingeschlossen.

Ist vieleicht der Code fehlerhaft?

Code: Alles auswählen

import csv
x = file('datei.csv','r')
reader = csv.reader(x)
delimiter=';'
for werte in reader:
    print reader
Stephan

Verfasst: Sonntag 26. September 2004, 14:29
von joe
Stephan hat geschrieben: Ist vieleicht der Code fehlerhaft?
Ja, ist aber mein fehler. Ich hatte da eine verwirrende klammer in dem einen beitrag. Richtig:
reader = csv.reader(x,delimiter=';')
joe

Verfasst: Sonntag 26. September 2004, 15:53
von Mawilo
Super, jetzt funktioniert das wunderbar! :D

Vielen Dank

Stephan