我认为这个问题更多是关于“编码风格”而不是技术问题。
假设我有一行代码:
假设我有一行代码:
buf = open('test.txt','r').readlines()
...
文件描述符会自动关闭吗?还是会一直留在内存中? 如果文件描述符没有关闭,关闭它的首选方式是什么?
buf = open('test.txt','r').readlines()
...
文件描述符会自动关闭吗?还是会一直留在内存中? 如果文件描述符没有关闭,关闭它的首选方式是什么?
.close()
显式地关闭它。f = open('test.txt','r')
buf = f.readlines()
f.close()
或者(更普遍的做法),您可以使用with
关键字(Python 2.5及以上版本)如Python文档中所述:
在处理文件对象时,最好使用
with
关键字。这样做的好处是当套件完成后,文件将被正确关闭,即使在过程中出现异常。与编写等效的try-finally块相比,这也要简短得多:
>>> with open('test.txt','r') as f:
... buf = f.readlines()
>>> f.closed
True
文件将一直保存在内存中,直到垃圾回收器关闭它。您应该始终明确地关闭文件描述符。只需执行以下操作:
with open('test.txt', 'r') as f:
buf = f.readlines()
它将会自动关闭,但具体取决于实现的时间。最好明确使用一个with块,但如果你只是为自己编写偶尔运行的小脚本,这并不重要。
with
在Python2.5中已经可用,但需要使用from __future__ import with_statement
导入。然而,在Python2.6及以上版本中不再需要这样做。 - Jay Conrod