如果我从文件example = open(example_file)
创建变量,然后将该文件读入变量example_read = example.read()
,那么我需要稍后关闭该文件example.close()
。
但如果我直接读入变量example_read = open(example_file).read()
,那么我就不需要关闭它(即它没有打开)。 (通过LPTHW)
为什么它已经关闭?我不明白以下解释 - 不管是使用中间变量example
还是直接使用example_read
,都不是一回事?
“当文件的引用对象被重新分配给另一个文件时,Python会自动关闭文件。” - TutorialsPoint
答案 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。你的问题是关于重新打开同一个文件。答案是一样的。我故意使用两个不同的文件来解释清楚。