readlines()是否关闭文件?

时间:2019-10-18 22:10:19

标签: python

这样做后是否需要关闭文件

lines = open(fname).readlines()

还是readlines()在读取数据后关闭文件?如果没有,应该如何关闭?

4 个答案:

答案 0 :(得分:4)

凭经验检查readlines是否关闭文件很容易:

>>> f = open("so.py")
>>> lines = f.readlines()
>>> f.closed
False
>>> f.close()
>>> f.closed
True

有些想法建议readlines应该不要关闭文件:即使EOF中有“书签”文件,也有一些有用的命令,以seek开头。 / p>

答案 1 :(得分:3)

否,该方法本身不会自动关闭文件。在某个时候(可靠地?),如果在代码中的任何地方都没有对它的引用,它将被关闭,但是readlines方法无法做到这一点。您可以显式地执行关闭操作:

f = open(...)
lines = f.readlines()
f.close()

或者:

lines = []
with open(...) as f:
    lines = f.readlines()

或者通过不维护对文件对象的任何引用来依靠垃圾收集器为您完成此操作:

lines = open(...).readlines()

这是您已经拥有的,在大多数情况下可能会很好。我不知道垃圾收集器为您提供的保证水平。

答案 2 :(得分:3)

如果您确实愿意,可以使用with语句,这将关闭文件而无需调用f.close()。 (有关在Python中使用with的指导,请参见here。)@ mypetition的回答当然是最不痛苦的选择。

答案 3 :(得分:1)

它不会关闭文件,但您不必担心,在您收集垃圾之前,文件将自动关闭。

CPython使用引用计数来清除对象,并且显然没有变量指向open返回的对象,因此将收集垃圾,并在此之前python将其关闭。