如果我做了以下事情:
import codecs
lines = codecs.open(somefile, 'r','utf8').readlines()
有没有办法关闭我尚未初始化的文件?如果是这样,怎么样?通常,我本可以做到:
import codecs
reader = codecs.open(somefile, 'r','utf8')
lines = reader.readlines()
reader.close()
答案 0 :(得分:6)
在CPython中,一旦引用计数降为0(即.readlines()
返回后),文件对象将自行关闭。对于其他Python实现,可能需要更长的时间,具体取决于所使用的垃圾收集算法。该文件肯定会在程序退出之前关闭。
您确实应该将文件对象用作上下文管理器,并在其上关闭with
语句调用:
with codecs.open(somefile, 'r','utf8') as reader:
lines = reader.readlines()
只要在with
语句下缩进的代码块退出(有异常,return
,continue
或break
语句,或者只是因为1}}文件对象将被关闭。
额外提示:文件对象是可迭代的,因此以下也适用:
reader
得到完全相同的结果。