0

当我做

open('output1.txt', 'w').write("Hello guys")

立即创建了一个名为 output1.txt 的文件,其中包含字符串“Hello guy”。但是当我这样做时

openvar = open('output2.txt', 'w')
openvar.write("Hello guys")

然后只创建文件 output2.txt。当我这样做时,只会在 output2.txt 上看到文本“Hello guy” openvar.close()。为什么这种行为仅仅因为额外的变量分配而不同?

4

2 回答 2

10

Python 检测到在您的第一种情况下不再引用文件对象,因此垃圾收集器将收集它并调用其析构函数来关闭文件。

在第二种情况下,文件对象仍然存在,因此它不会自动关闭。


完成后,您应该始终关闭文件。该with声明使这很容易:

with open('output.txt', 'w') as f:
    f.write('Hello')

一旦块离开,文件就会再次关闭 - 即使块内的代码引发异常。


如果您出于某种原因需要保持文件打开(例如,因为您要写入更多数据),您可以.flush()强制系统清空写入缓冲区并将其实际写入文件。

于 2012-04-05T08:26:24.090 回答
2

在第一种情况下,垃圾收集器将为您关闭文件。没有对该文件的引用。在第二种情况下,您创建了对该文件的引用。您必须手动关闭它,否则当引用被销毁时它将被垃圾收集器关闭。

于 2012-04-05T08:27:32.073 回答