open('output1.txt','w')。write(“Hello guys”)与openvar.write(“Hello guys”)

时间:2012-04-05 08:23:02

标签: python file variables

当我这样做时

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

立即创建一个名为output1.txt的文件,其中包含字符串" Hello guys"。 但是当我做的时候

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

然后只创建文件output2.txt。文字" Hello guys"只有在我openvar.close()时才能在output2.txt上看到。 为什么这种行为只是因为额外的变量赋值而不同?

2 个答案:

答案 0 :(得分:10)

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

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


区域完成后,始终关闭文件。 with语句使这很容易:

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

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


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

答案 1 :(得分:2)

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