Python will, 一般来说,垃圾收集不再使用且不再被引用的对象。这意味着与垃圾收集器的过滤器匹配的打开文件对象完全有可能被清理并可能被关闭。However;你不应该依赖这个,而是使用:
with open(..):
Example (也是最佳实践):
with open("file.txt", "r") as f:
# do something with f
NB: If you don't关闭文件并在系统上保留“打开的文件描述符”,您最终将开始达到系统上的资源限制;特别是“ulimit”。您最终将开始看到与“打开文件过多”相关的操作系统错误。 (假设这里是 Linux,但其他操作系统也会有类似的行为).
重要的:这也是一个好的做法关闭您写入的所有打开的文件,以便正确刷新您写入的数据。这有助于确保数据完整性,并且不会因应用程序崩溃而导致文件意外包含损坏的数据。
值得注意的是,上述重要说明是导致文件写入位置出现许多问题的原因;读回来;发现里面是空的;但然后关闭你的Python程序;在文本编辑器中阅读它并意识到它不是空的。
Demo:如果不确保关闭打开的文件,可能会遇到资源限制和错误的一个很好的例子:
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> xs = [open("/dev/null", "r") for _ in xrange(100000)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 24] Too many open files: '/dev/null'