2016-05-29 47 views

回答

3

它會(可能會看到評論)在收集垃圾時被關閉;然而,處理它最徹底的方法是with塊中:

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

如果過程是短暫的,它應該不會造成太大的麻煩,但它是很好的做法,儘快釋放手柄,因爲它成爲不必要。

+1

「除非你關閉文件,是,它將保持開放。「這不是真的:在CPython中,臨時文件對象將立即被垃圾回收並關閉。在其他Python變體(IronPython,Jython)中,下次運行垃圾收集時,文件對象將被關閉。 –

+0

是按照標準還是依賴於實施? – Tordek

+1

是的,它不是語言參考本身的一部分;該行爲絕對依賴於實現。有趣的是,當文件對象垃圾被收集時,我甚至都無法在文檔中找到關於文件自動關閉的提及:你會認爲這是明確的。 (也許我只是想念它。) –

3

在CPython中,open(file)的結果在.read()完成後沒有任何引用,如果沒有例外,那麼它將立即被垃圾收集,從而導致它關閉。

但是不要這樣做。發揮便利功能:

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

data = read_file(path) 

另外,不要爲保存一行代碼而煩惱。這種態度會導致錯誤的代碼。

0

是的,這將繼續開放,我的方式來打開數據是這樣的:

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

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

希望我能幫助你

相關問題