为什么在Python中要关闭文件?
通常情况下,当我打开文件时,我从来不调用 close()
方法,但也没发生什么坏事。不过有人告诉我这样做是不对的。那这是为什么呢?
6 个回答
当你在写文件的时候,只有在这个时候你需要调用 close()
。
大多数情况下,Python会自动帮你关闭文件,但有时候它可能不会自动关闭,所以为了保险起见,你最好手动调用一下。
文件对象的close()方法会把任何未写入的信息保存好,然后关闭这个文件对象,之后就不能再往里面写东西了。
在Python中,当一个文件的引用对象被重新指向另一个文件时,系统会自动关闭之前的文件。为了确保文件被正确关闭,使用close()方法是个好习惯。这里有关于close()方法的链接。希望这对你有帮助。
打开文件会占用一些资源,而且可能会被锁住,这样其他程序就不能使用它了。因此,读取文件时最好使用 with
这个方法,因为它会帮你自动关闭文件。
with open('file', 'r') as f:
read_data = f.read()
下面是一个“坏”的例子,说明如果你不关闭文件可能会发生什么。你在 Python 解释器中打开一个文件进行写入,写入一段字符串,然后再用文本编辑器打开这个文件。在我的系统上,文件会一直是空的,直到我关闭文件。
找到了一些不错的答案:
(1) 这是一个好的编程习惯。如果你不自己关闭文件,Python最终会为你关闭它们。在某些版本的Python中,这可能在文件不再被使用的瞬间发生;而在其他版本中,可能要过很久才会关闭。在某些情况下,可能根本不会关闭。
(2) 当你写入文件时,数据可能在文件关闭之前并不会写入到硬盘上。当你执行“output.write(...)”时,数据通常会先保存在内存中,直到文件关闭才会写入硬盘。你打开文件的时间越长,丢失数据的风险就越大。
(3) 由于你的操作系统对同时打开的文件数量有严格限制,所以最好养成在不需要时就关闭文件的习惯,而不是等着“清洁服务”来帮你收拾。
(4) 此外,一些操作系统(特别是Windows)会把打开的文件视为被锁定和私有的。当你打开一个文件时,其他程序就无法打开它,即使只是想读取数据。这会影响备份程序、杀毒扫描等。
http://python.6.x6.nabble.com/Tutor-Why-do-you-have-to-close-files-td4341928.html https://docs.python.org/2/tutorial/inputoutput.html
大多数情况下,不关闭文件是个坏主意,原因如下:
这会把你的程序交给垃圾回收器来处理——虽然理论上文件会自动关闭,但实际上可能并不会。Python 3 和 Cpython 在垃圾回收方面做得还不错,但并不总是有效,其他版本的表现通常很差。
这可能会让你的程序变慢。打开的文件太多,会占用更多的内存空间,从而影响性能。
大多数情况下,Python 对文件的许多修改在文件关闭之前不会生效,所以如果你的脚本编辑了文件但没有关闭,然后又读取这个文件,它是看不到这些修改的。
理论上,你可能会遇到同时打开的文件数量限制。
正如@sai在下面提到的,Windows 会把打开的文件视为锁定状态,因此像杀毒软件或其他 Python 脚本这样的合法程序无法读取这个文件。
这是一种不规范的编程方式(不过,我自己也不太记得关闭文件!)