如果在打开的同一行读取文件会自动关闭吗?

时间:2016-09-16 19:24:15

标签: python file io

如果我这样做(在Python中):

text = open("filename").read()

是自动关闭的文件吗?

3 个答案:

答案 0 :(得分:6)

垃圾收集器会在某个时刻被激活,但除非你强迫它,否则你无法确定它。

确保在超出范围时关闭文件的最佳方法是:

with open("filename") as f: text = f.read()

也是单线但更安全。

答案 1 :(得分:3)

在CPython(参考Python实现)中,文件将自动关闭。 CPython一旦没有引用就会销毁对象,这最迟发生在语句的末尾。

在其他Python实现中,这可能不会马上发生,因为它们可能依赖于底层虚拟机的内存管理,或完全使用其他内存管理策略(参见PyParallel有趣的例子)。

Python,这种语言,没有指定任何特定形式的内存管理,因此您不能依赖于在一般情况下关闭的文件。如果您需要依赖它,请使用with语句明确指定何时关闭它。

在实践中,我经常在短期脚本中使用这种方法,在文件关闭时并不重要。

答案 2 :(得分:2)

由于您没有关于打开文件句柄的引用, CPython将在垃圾收集或程序退出期间自动关闭它。这里的问题是你没有任何关于何时会发生这种情况的保证,这就是首选with open(...)结构的原因。