如果我没有初始化文件,如何关闭文件?

alv*_*vas 4 python io file

如果我做了以下事情:

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)

Mar*_*ers 6

在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)

对于完全相同的结果.

  • @ 2er0:CPython是你从python.org下载的Python的默认实现.它之所以被称为是因为解释器本身是用C实现的,而不是Jython(在Java中),IronPython(在C#中)和PyPy(在Python的子集中). (3认同)