Seite 1 von 1

Verständnisproblem csv.writer

Verfasst: Donnerstag 18. Juni 2009, 19:40
von netbie
Hallo,

ich verstehe nicht, warum nicht in die angegebene Datei geschrieben wird, wenn ich folgendes in die Python Shell eingebe:

Code: Alles auswählen

>>> import csv

>>> writer = csv.writer(open("csvw.csv", "w"), delimiter = ",")
>>> writer.writerows(([1,2,3,4,5], [44,55,66,77,88], [33,22,11,56,66]))

Erst nachdem ich nochmals

Code: Alles auswählen

>>> writer = csv.writer(open("csvw.csv", "w"), delimiter = ",")
aufrufe wird in die Datei geschrieben. So kann das aber doch wohl nicht gedacht sein?
In der Doku finde ich jedenfalls keinen Hinweis darauf, dass nach writerow bzw. writerows noch weitere Operationen nötig sind, um die Daten in die Datei zu schreiben.

Verfasst: Donnerstag 18. Juni 2009, 19:59
von cofi

Code: Alles auswählen

>>> import csv
>>> fobj = open("csvw.csv", "w")
>>> writer = csv.writer(fobj, delimiter = ",")
>>> writer.writerows(([1,2,3,4,5], [44,55,66,77,88], [33,22,11,56,66]))
>>> fobj.close()
Das Problem beim Code in der Doku ist, dass das Fileobjekt erst vom GC aufgesammelt werden muss, dass die Datei geschlossen wird. Es ist besser ein eigenes Objekt zu verwenden und das explizit zu schliessen.

Verfasst: Donnerstag 18. Juni 2009, 20:11
von derdon
Mit with-statement:

Code: Alles auswählen

>>> import csv
>>> with open("csvw.csv", "w") as fobj:
...     writer = csv.writer(obj, delimiter = ",")
...     writer.writerows(([1,2,3,4,5], [44,55,66,77,88], [33,22,11,56,66]))

Verfasst: Donnerstag 18. Juni 2009, 20:49
von busfahrer
@cofi und @derdon
ahnungslos und neugierig wie ich bin,frag ich doch mal,muss es wirklich

Code: Alles auswählen

writer = csv.writer(obj, delimiter = ",")
heissen oder nicht doch

Code: Alles auswählen

writer = csv.writer(fobj, delimiter = ",")
Gruß...busfahrer

Verfasst: Donnerstag 18. Juni 2009, 21:08
von EyDu
Probiere es doch einfach mal aus, es wird nur eine Version funktionieren ;-) Python wird mit Sicherheit nicht auf magische Weise irgendwelche Namen erzeugen.

Verfasst: Freitag 19. Juni 2009, 10:34
von derdon
Das kommt davon, wenn man seinen Code nicht testet :oops: