我为什么要在Python中关闭文件?

时间:2014-08-01 00:00:48

标签: python

通常当我打开文件时,我从不调用close()方法,并且没有任何不好的事情发生。但我被告知这是不好的做法。那是为什么?

6 个答案:

答案 0 :(得分:26)

在大多数情况下,不关闭文件是一个坏主意,原因如下:

  1. 它将你的程序放在垃圾收集器手中 - 虽然理论上 文件将自动关闭,但它可能无法关闭。 Python 3和Cpython通常在垃圾收集方面做得非常好,但并不总是如此,而其他变种通常会对它产生不良影响。

  2. 它会降低您的程序速度。打开太多东西,因此RAM中更多的空间会影响性能。

  3. 在大多数情况下,对文件中的文件进行的许多更改都不会在关闭文件后生效,因此如果脚本编辑,请保持打开状态并读取文件,它不会看到编辑。

  4. 理论上,您可以限制可以打开的文件数量。

  5. 正如@sai所述,Windows将打开的文件视为已锁定,因此AV扫描程序或其他python脚本等合法内容无法读取该文件。

  6. 这是一个草率的编程(然后我再也不记得自己关闭文件了!)

  7. 希望这有帮助!

答案 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会在大多数时间自动关闭文件,但有时它不会,所以你想手动调用它以防万一。