如果我做了以下事情:
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
语句下缩进的代码块退出(无论是异常、areturn
或continue
语句break
,还是仅仅因为块中的所有代码都执行完毕),reader
文件对象将被关闭。
额外提示:文件对象是可迭代的,因此以下内容也适用:
with codecs.open(somefile, 'r','utf8') as reader:
lines = list(reader)
获得完全相同的结果。