2016-05-29 9 views

Antwort

3

Es wird (wahrscheinlich, siehe Kommentare) geschlossen sein, wenn Müll gesammelt wird; aber die sauberste Weg, es zu handhaben innerhalb eines with Block ist:

with open(file, "r") as datafile: 
    data = datafile.read() 

Wenn der Prozess von kurzer Dauer ist, sollte es nicht zu viel Mühe verursachen, aber es ist eine gute Übung, sobald der Griff zu lösen, wie es wird nicht notwendig.

+1

„Wenn Sie die Datei schließen, ja , es wird offen bleiben. " Dies ist nicht wahr: In CPython wird das temporäre Dateiobjekt sofort als Garbage Collection erfasst und geschlossen. In anderen Python-Varianten (IronPython, Jython) wird das Dateiobjekt beim nächsten Ausführen der Garbage Collection geschlossen. –

+0

Ist das per Standard oder ist es implementierungsabhängig? – Tordek

+1

Ja, es ist nicht Teil der Sprachreferenz selbst; Das Verhalten ist definitiv implementierungsabhängig. Interessant ist, dass ich in der Dokumentation nicht einmal eine Erwähnung finden kann, dass die Datei automatisch geschlossen wird, wenn der entsprechende Dateiobjektmüll erfasst wird: Sie würden meinen, dass das irgendwo explizit wäre. (Vielleicht verpasse ich es gerade.) –

3

In CPython wird das Ergebnis von open(file) keine Verweise darauf haben, nachdem .read() abgeschlossen, wenn es keine Ausnahmen gab, so wird es sofort Garbage Collected sein, die zum Schließen führen wird.

Aber tun Sie das nicht. Machen Sie eine Komfortfunktion:

def read_file(path): 
    with open(path) as f: 
     return f.read() 

data = read_file(path) 

Auch nicht um eine Codezeile zu sparen. Diese Einstellung wird zu schlechtem Code führen.

0

ja, es bleibt offen, meine Art und Weise Daten wie diese zu öffnen:

with open("file","rb") as f: 
     data=f.readlines() 

oder

datas=open("file","rb") 
data=datas.readlines() 

wünsche ich Ihnen helfen könnte