Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python readlines()是否关闭该文件?_Python - Fatal编程技术网

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,如果是这样的话,问题可能会稍微有趣一些:“Does
open(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