爲了縮短代碼一點,我使用的是這樣的:打開(file).read()命令後,文本文件是否仍然打開?
data = open(file).read()
這是不可能的data.close()
因爲data
關閉它是一個字符串,所以我問一個問題:如果該行被讀取後,是文件還是打開?我需要打擾以某種方式關閉它嗎?
爲了縮短代碼一點,我使用的是這樣的:打開(file).read()命令後,文本文件是否仍然打開?
data = open(file).read()
這是不可能的data.close()
因爲data
關閉它是一個字符串,所以我問一個問題:如果該行被讀取後,是文件還是打開?我需要打擾以某種方式關閉它嗎?
它會(可能會看到評論)在收集垃圾時被關閉;然而,處理它最徹底的方法是with
塊中:
with open(file, "r") as datafile:
data = datafile.read()
如果過程是短暫的,它應該不會造成太大的麻煩,但它是很好的做法,儘快釋放手柄,因爲它成爲不必要。
在CPython中,open(file)
的結果在.read()
完成後沒有任何引用,如果沒有例外,那麼它將立即被垃圾收集,從而導致它關閉。
但是不要這樣做。發揮便利功能:
def read_file(path):
with open(path) as f:
return f.read()
data = read_file(path)
另外,不要爲保存一行代碼而煩惱。這種態度會導致錯誤的代碼。
是的,這將繼續開放,我的方式來打開數據是這樣的:
with open("file","rb") as f:
data=f.readlines()
或
datas=open("file","rb")
data=datas.readlines()
希望我能幫助你
「除非你關閉文件,是,它將保持開放。「這不是真的:在CPython中,臨時文件對象將立即被垃圾回收並關閉。在其他Python變體(IronPython,Jython)中,下次運行垃圾收集時,文件對象將被關閉。 –
是按照標準還是依賴於實施? – Tordek
是的,它不是語言參考本身的一部分;該行爲絕對依賴於實現。有趣的是,當文件對象垃圾被收集時,我甚至都無法在文檔中找到關於文件自動關閉的提及:你會認爲這是明確的。 (也許我只是想念它。) –