2013-07-01 87 views
4

如果我做了以下內容:如何關閉文件,如果我沒有初始化它?

import codecs 
lines = codecs.open(somefile, 'r','utf8').readlines() 

有沒有辦法關閉,我已經沒有初始化文件?如果是這樣,怎麼樣?通常情況下,我可以這樣做:

import codecs 
reader = codecs.open(somefile, 'r','utf8') 
lines = reader.readlines() 
reader.close() 
+1

「初始化」在這裏是一個奇怪的詞。有沒有辦法關閉一個你沒有變量的文件?但是,正如Martijn所指出的,它至少在程序退出時會自行關閉。 –

回答

6

在CPython的文件對象將關閉其自身一旦引用計數下降到0,這是之後.readlines()回報。對於其他Python實現,根據所使用的垃圾收集算法的不同,可能需要一些時間。該文件肯定會在不晚於程序退出時關閉。

你真的應該使用文件對象作爲上下文管理和關閉有它的with聲明呼籲:

with codecs.open(somefile, 'r','utf8') as reader: 
    lines = reader.readlines() 

只要代碼with聲明退出(下縮進塊用吧例外,return,continuebreak聲明,或者僅僅是因爲塊中的所有代碼完成執行),reader文件對象將被關閉。

特別提示:文件對象是iterables,所以下面也可以工作:

with codecs.open(somefile, 'r','utf8') as reader: 
    lines = list(reader) 

對於完全相同的結果。

+0

CPython python? – alvas

+3

@ 2er0:CPython是從python.org下載的Python的默認實現。這是所謂的,因爲解釋器本身是用C實現的,與Jython(Java),IronPython(用C#)和PyPy(用Python的一個子集)相反。 –

相關問題