“将文件的引用对象重新分配给另一个文件”是什么意思?

时间:2015-11-30 01:25:46

标签: python file

如果我从文件example = open(example_file)创建变量,然后将该文件读入变量example_read = example.read(),那么我需要稍后关闭该文件example.close()

但如果我直接读入变量example_read = open(example_file).read(),那么我就不需要关闭它(即它没有打开)。 (通过LPTHW

为什么它已经关闭?我不明白以下解释 - 不管是使用中间变量example还是直接使用example_read,都不是一回事?

  

“当文件的引用对象被重新分配给另一个文件时,Python会自动关闭文件。” - TutorialsPoint

2 个答案:

答案 0 :(得分:2)

file的调用创建的open对象是匿名的,因为您没有创建对它的引用。一旦对该对象的read的调用完成并且其返回值被分配给example_read,该对象就可以被垃圾收集,此时底层文件将被关闭。但是,您并不确切知道何时会发生,因此该文件可能会在未指定的时间段内保持打开状态。

更好的做法是避免使用此类匿名文件对象和/或使用with语句确保文件在完成后关闭。

with open(example_file) as fh:
    example_read = fh.read()

这保证了with语句完成后文件将立即关闭,即使是由

创建的匿名(尽管无用)对象也是如此
with open(example_file):
    # Do something without the file object.

答案 1 :(得分:0)

这意味着,例如

f = open( 'file1.txt', 'r' )
f = open( 'file2.txt', 'r' )

在第二行,引用f被重新分配给另一个文件(即file2.txt)。所以python会自动关闭file1.txt

N.B。你的问题是关于重新打开同一个文件。答案是一样的。我故意使用两个不同的文件来解释清楚。