Verständnisproblem csv.writer

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
netbie
User
Beiträge: 2
Registriert: Samstag 9. Mai 2009, 18:03

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Zuletzt geändert von cofi am Donnerstag 18. Juni 2009, 21:12, insgesamt 1-mal geändert.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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]))
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

@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
Alles wird gut ;-)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Probiere es doch einfach mal aus, es wird nur eine Version funktionieren ;-) Python wird mit Sicherheit nicht auf magische Weise irgendwelche Namen erzeugen.
Das Leben ist wie ein Tennisball.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Das kommt davon, wenn man seinen Code nicht testet :oops:
Antworten