nightsky
Anmeldungsdatum: 20. Januar 2011
Beiträge: 312
|
Hallo, ich probier gerade ein bisschen mit Python herum. Für den Anfang wollte ich einfach eine csv Datei namens test.csv einlesen und vom Programm anzeigen lassen.
Die Datei sieht so aus: A,B,C,D 1,2,3,4 a,b,c,d e,f,g,h Mein Code folgendermaßen: | import csv
reader = csv.reader(open("test.csv","rb"))
for row in reader:
print("row")
|
Beim Aufruf geschieht allerdings:
| ./pytest.py
Traceback (most recent call last):
File "./pytest.py", line 8, in <module>
for row in reader:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
|
Kann jemand einem Beginner auf die Sprünge helfen? Laut
http://openbook.galileocomputing.de/python/python_kapitel_19_005.htm
sollte doch
| ['vorname', 'nachname', 'geburtsdatum', 'wohnort', 'haarfarbe']
['Daniel', 'Zakowski', '29.11.1987', 'Dinslaken', 'Schwarz']
['David', 'Sch\xf6nauer', '10.09.1988', 'Aachen', 'Braun']
['Sebastian', 'Sentner', '06.09.1987', 'Sydney', 'Dunkelblond']
['Jan', 'Fitzke', '13.09.1987', 'K\xf6ln', 'Schwarz']
['Lucas', 'H\xf6velmann', '25.03.1988', 'Canberra', 'Hellrot']
|
ausgegeben werden? (bzw. statt "vorname" "nachname" etc. eben "A" "B" usw.)
|
nightsky
(Themenstarter)
Anmeldungsdatum: 20. Januar 2011
Beiträge: 312
|
Okay, der Binärmodus (rb) war das Problem.
Ohne den erhalte ich aber trotzdem die nicht besonders gewünschte Ausgabe:
//edit:
Okay, da tut man ewig selber rum und kurz nachdem man dann einen Thread zum Problem erstellt löst sich alles auf ^^
Der funktionierende Code ist: | import csv
reader = csv.reader(open("test.csv"))
for row in reader:
print(row)
|
Mit den Anführungsstrichen wird natürlich nur der String "row" ausgegeben..... also sorry für die blöden Fragen.
|
jakon
Lokalisierungsteam
Anmeldungsdatum: 16. November 2009
Beiträge: 419
|
Das Buch, das du erwähnt hast, behandelt übrigens Python 2.5, nicht Python 3k, weshalb es auch sonst zu Fehlern kommen könnte, die bei Python 2 nicht aufgetreten wären. Dein erstes Skript hätte zum Beispiel unter Python 2, jedoch nicht unter Python 3, funktioniert. Python 3 unterscheidet stark zwischen Byte- und Unicode-Strings, und deswegen beschwert es sich. Übrigens sollte man Dateien mit with öffnen: | with open(filename, modes) as f:
# tu etwas mit 'f', z. B.:
reader = csv.reader(f)
|
Dann wird die Datei nämlich auch (automatisch) geschlossen, was bei deinem Skript nicht der Fall ist.
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
nightsky schrieb: http://openbook.galileocomputing.de/python/python_kapitel_19_005.htm
Wann endlich wird dieses Machwerk endlich mal dermaßen von google gedisst, dass Anfänger die Rants zuerst lesen und das Buch damit links liegen lassen, bevor es sie verdirbt? @nightsky: Vergiss dieses Buch! Nimm lieber das "offizielle Tutorial", "A Byte of Python" oder "Learn Python the hard way"! Auf keinen Fall Bücher von Ernesti oder Kaiser in diesem Kontext.
|