Python readlines()是否关闭该文件?
执行以下操作后是否需要关闭文件:Python readlines()是否关闭该文件?,python,Python,执行以下操作后是否需要关闭文件: lines = open(fname).readlines() 或者readlines()读取数据后是否关闭文件?如果没有,应如何关闭该文件?否,该方法本身不会自动关闭该文件。在某个时刻(可靠地?),如果在代码中的任何地方都没有对它的引用,它将被关闭,但这不是通过readlines方法完成的。您可以显式执行关闭操作: f = open(...) lines = f.readlines() f.close() 或: 或者依赖垃圾回收器来为您执行此操作,方法是不
lines = open(fname).readlines()
或者
readlines()
读取数据后是否关闭文件?如果没有,应如何关闭该文件?否,该方法本身不会自动关闭该文件。在某个时刻(可靠地?),如果在代码中的任何地方都没有对它的引用,它将被关闭,但这不是通过readlines
方法完成的。您可以显式执行关闭操作:
f = open(...)
lines = f.readlines()
f.close()
或:
或者依赖垃圾回收器来为您执行此操作,方法是不维护对文件对象的任何引用:
lines = open(...).readlines()
这就是你已经拥有的,而且在大多数情况下可能是好的。我不知道垃圾收集器在那里给你的保证程度。如果你真的想,你可以使用
with
语句,它可以关闭文件,而不必调用f.close()
。(有关在Python中与一起使用的指南,请参阅。)但是@my呈请的答案肯定是最不痛苦的选择。它不会关闭文件,但您不必担心,您的文件将在垃圾收集之前自动关闭
CPython使用引用计数来清除对象,显然没有指向
open
返回的对象的变量,因此它将被垃圾收集,python会在这之前关闭它们。根据经验很容易检查readlines
是否关闭文件:
>>> f = open("so.py")
>>> lines = f.readlines()
>>> f.closed
False
>>> f.close()
>>> f.closed
True
稍微考虑一下,
readlines
不应该关闭文件:即使在EOF中有文件“bookmark”,也有一些有用的命令,从seek
开始,以open(fname)作为文件:…
-(例如)FWIW,如果是这样的话,问题可能会稍微有趣一些:“Doesopen(file).readlines()
是否自动关闭文件;这也是一个稍微不同的问题,因为readlines在这种情况下只是使用打开的文件,而不是显式地控制(事实并非如此);global_f.readlines()-在程序结束之前不会关闭该文件。“GC”的可能重复不会确保文件。在这种情况下,“在不久的将来的某个时候”关闭?AIK没有建立cylic ref,CPython有一个相对确定的实现。。无论“正确”与否,它都是一种不同的模式,而不是在变量(例如)中保留打开的文件。行
不是字符串列表吗?它没有close
方法。在问题中给出的示例中,文件对象没有保存在任何可见/泄漏的中间名称中。@user2864740 Yes,但问题是readlines
方法是否进行实际关闭。但事实并非如此,所以我试图让我的解释更为笼统,以防OP考虑到其他用例。哎呀!我掉进了和@My呈请一样的陷阱。。。相应地编辑我的答案,readlines
方法不会关闭文件,垃圾收集器会关闭文件。
>>> f = open("so.py")
>>> lines = f.readlines()
>>> f.closed
False
>>> f.close()
>>> f.closed
True