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