通常当我打开文件时,我从不调用close()
方法,并且没有任何不好的事情发生。但我被告知这是不好的做法。那是为什么?
答案 0 :(得分:26)
在大多数情况下,不关闭文件是一个坏主意,原因如下:
它将你的程序放在垃圾收集器手中 - 虽然理论上 文件将自动关闭,但它可能无法关闭。 Python 3和Cpython通常在垃圾收集方面做得非常好,但并不总是如此,而其他变种通常会对它产生不良影响。
它会降低您的程序速度。打开太多东西,因此RAM中更多的空间会影响性能。
在大多数情况下,对文件中的文件进行的许多更改都不会在关闭文件后生效,因此如果脚本编辑,请保持打开状态并读取文件,它不会看到编辑。
理论上,您可以限制可以打开的文件数量。
正如@sai所述,Windows将打开的文件视为已锁定,因此AV扫描程序或其他python脚本等合法内容无法读取该文件。
这是一个草率的编程(然后我再也不记得自己关闭文件了!)
希望这有帮助!
答案 1 :(得分:5)
找到了一些好的答案:
(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
答案 2 :(得分:1)
打开文件使用资源并可能被锁定,阻止其他程序使用它们。无论如何,最好在阅读文件时使用with
,因为它会为您关闭文件。
with open('file', 'r') as f:
read_data = f.read()
这是一个如果你打开一个文件可能会发生的“坏”的例子。 打开一个文件,在python解释器中写入,写一个字符串,然后在文本编辑器中打开该文件。在我的系统上,文件将为空,直到我关闭文件句柄。
答案 3 :(得分:1)
我最近遇到了一个问题: 我正在写一些东西到for循环中的文件,但如果我用^ C中断脚本,那么应该实际写入文件的很多数据都不存在。看起来Python无缘无故地停在那里写作。我在for循环之前打开了文件。然后我更改了代码,以便Python打开并关闭文件以进行循环的单次传递。
基本上,如果你为自己编写东西并且没有任何问题 - 没关系,如果你为更多的人写东西而不仅仅是你自己 - 在代码中放一个close(),因为有人可以随机得到一个错误消息,您应该尝试阻止这种情况。
答案 4 :(得分:0)
文件对象的close()方法刷新任何未写入的信息并关闭文件对象,之后不再需要写入。
当文件的引用对象被重新分配给另一个文件时,Python会自动关闭文件。最好使用close()方法关闭文件。Here is the link about the close() method。我希望这会有所帮助。
答案 5 :(得分:0)
您只需在写入文件时致电close()
。
Python会在大多数时间自动关闭文件,但有时它不会,所以你想手动调用它以防万一。