如果我做了以下內容:如何關閉文件,如果我沒有初始化它?
import codecs
lines = codecs.open(somefile, 'r','utf8').readlines()
有沒有辦法關閉,我已經沒有初始化文件?如果是這樣,怎麼樣?通常情況下,我可以這樣做:
import codecs
reader = codecs.open(somefile, 'r','utf8')
lines = reader.readlines()
reader.close()
如果我做了以下內容:如何關閉文件,如果我沒有初始化它?
import codecs
lines = codecs.open(somefile, 'r','utf8').readlines()
有沒有辦法關閉,我已經沒有初始化文件?如果是這樣,怎麼樣?通常情況下,我可以這樣做:
import codecs
reader = codecs.open(somefile, 'r','utf8')
lines = reader.readlines()
reader.close()
在CPython的文件對象將關閉其自身一旦引用計數下降到0,這是之後.readlines()
回報。對於其他Python實現,根據所使用的垃圾收集算法的不同,可能需要一些時間。該文件肯定會在不晚於程序退出時關閉。
你真的應該使用文件對象作爲上下文管理和關閉有它的with
聲明呼籲:
with codecs.open(somefile, 'r','utf8') as reader:
lines = reader.readlines()
只要代碼with
聲明退出(下縮進塊用吧例外,return
,continue
或break
聲明,或者僅僅是因爲塊中的所有代碼完成執行),reader
文件對象將被關閉。
特別提示:文件對象是iterables,所以下面也可以工作:
with codecs.open(somefile, 'r','utf8') as reader:
lines = list(reader)
對於完全相同的結果。
CPython python? – alvas
@ 2er0:CPython是從python.org下載的Python的默認實現。這是所謂的,因爲解釋器本身是用C實現的,與Jython(Java),IronPython(用C#)和PyPy(用Python的一個子集)相反。 –
「初始化」在這裏是一個奇怪的詞。有沒有辦法關閉一個你沒有變量的文件?但是,正如Martijn所指出的,它至少在程序退出時會自行關閉。 –