当我这样做时
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上看到。
为什么这种行为只是因为额外的变量赋值而不同?
答案 0 :(得分:10)
Python在第一种情况下检测到文件对象不再被引用,因此垃圾收集器将收集它并调用它的析构函数来关闭文件。
在第二种情况下,文件对象仍然存在,因此它不会自动关闭。
区域完成后,始终关闭文件。 with
语句使这很容易:
with open('output.txt', 'w') as f:
f.write('Hello')
一旦剩下该块,文件就会再次关闭 - 即使块内的代码引发异常。
如果由于某种原因需要保持文件打开(例如因为要写更多数据),可以.flush()
强制系统清空写缓冲区并实际将其写入文件
答案 1 :(得分:2)
在第一种情况下,垃圾收集器会为您关闭文件。没有对该文件的引用。在第二种情况下,您已创建对该文件的引用。您必须手动关闭它,否则当参考被销毁时它将被垃圾收集器关闭。