Seite 1 von 1

open("blub").readlines() danach nochmal schließen?

Verfasst: Donnerstag 25. März 2010, 14:57
von Bitzkit
Hi,

muss ich eine Datei -wenn ich diese mit

Code: Alles auswählen

data = open("blub").readlines()
auslese- wieder schließen ?

Bzw. ich kann sie ja dann nicht mehr schließen, weil ich das File Objekt nicht mehr habe.

oder sollte ich dann besser

Code: Alles auswählen

with open('blub') as data_file:
    data = data_file.readlines()
schreiben ?

Die Frage ist mir gekommen, weil ich meist die erste Variante benutze (Faulheit und so :oops: )

Danke

Verfasst: Donnerstag 25. März 2010, 15:13
von Dav1d
Eine Datei sollte immer geschlossen werden!
Also 2. benutzen (with-Statement)

Verfasst: Donnerstag 25. März 2010, 15:19
von cofi
Und dann stellt sich dich Frage, ob du wirklich die gesamten Daten in einer Liste benoetigst, oder du einfach nur sequenziell die Zeilen abarbeiten willst.

Dann kannst du auch ueber das Datei-Objekt iterieren.

Verfasst: Donnerstag 25. März 2010, 15:28
von Bitzkit
Dav1d hat geschrieben:Eine Datei sollte immer geschlossen werden!
Also 2. benutzen (with-Statement)
Ok, danke. Hatte das mal irgendwo in dem ein oder anderen Code gesehen und dachte da steckt etwas Magie hinter und die Datei wird automatisch geschlossen :oops:
wobei in Python ja normal nicht sein sollte. Keine Ahnung was ich mir da gedacht habe.

:arrow: ab jetzt wird sie immer explizit geschlossen
cofi hat geschrieben:Und dann stellt sich dich Frage, ob du wirklich die gesamten Daten in einer Liste benoetigst, oder du einfach nur sequenziell die Zeilen abarbeiten willst.

Dann kannst du auch ueber das Datei-Objekt iterieren.
Jo das ist klar, in den Fällen benutze ich auch das with-statement. Ging jetzt nur darum, wenn ich die gesamte Datei als liste brauche.

Vielen Dank euch beiden.

Verfasst: Donnerstag 25. März 2010, 15:33
von DasIch
Die Datei wird i.d.R. geschlossen wenn der GC dass Datei Objekt aufräumt. Dass kann allerdings irgendwann oder nie passieren.

Verfasst: Donnerstag 25. März 2010, 15:34
von Dav1d
Wenn die Datei zu groß ist gibts eine Exception von wegen OverflowError