ubuntuusers.de

[Python Anfängerproblem] Csv Datei einlesen und Inhalt anzeigen

Status: Gelöst | Ubuntu-Version: Ubuntu 11.10 (Oneiric Ocelot)
Antworten |

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:

1
2
3
4
import csv
reader = csv.reader(open("test.csv","rb"))
for row in reader:
	print("row")

Beim Aufruf geschieht allerdings:

1
2
3
4
5
./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

1
2
3
4
5
6
['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:

1
2
3
4
5
6
row
row
row
row
row
row

//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:

1
2
3
4
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 Team-Icon

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:

1
2
3
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

Avatar von 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.

Antworten |