深入解析Python中的close()函数:文件操作完成后为何必须关闭
在之前的章节里,对于通过 open() 函数打开的文件,我们始终是用 close() 函数来进行手动关闭的。而在本节,我们要详细地介绍一下 close() 函数。

close()函数的作用是专门用于关闭已打开的文件。它的语法格式较为简单,具体如下所示:
file.close()
其中,file 表示已打开的文件对象。
读者或许一直存有这样的疑问:使用 open() 函数打开的文件,在操作完毕之后,是否一定要调用 close() 函数来将其关闭呢?答案是确定的。文件在被打开且操作完成之后,就应当及时进行关闭,不然程序的运行可能会产生问题。
举个例子,分析如下代码:
import os
打开一个名为“my_file.txt”的文件,以写入模式('w')进行操作,将其赋值给变量 f 。
#...
os.remove("my_file.txt")
在代码里,我们将 os 模块给引入了,接着调用了这个模块里面的 remove()函数,此函数具备删除指定文件的功能。然而,要是运行这个程序的话,Python 解释器就会报出如下这样的错误:
追溯(最近的调用最后):
在文件“C:\Users\mengma\Desktop\demo.py”的第 4 行中。
os.remove("my_file.txt")
PermissionError 发生,原因是[WinError 32],即另一个程序正在使用此文件,所以进程无法访问,具体是文件“my_file.txt”。
显然,我们使用了 open() 函数打开了 my_file.txt 文件,然而却没有及时关闭它。这直接导致了后续的 remove() 函数运行出现错误。所以,正确的程序应该是这样的:
import os
f = open("my_file.txt",'w')
f.close()
#...
os.remove("my_file.txt")
确定 my_file.txt 文件可被删除后,再次运行程序,就能发现该文件已被成功删除。
再举个例子,若我们不调用 close()函数来关闭已打开的文件,虽然确定不会影响读取文件的操作,但是会致使 write()或者 writeline()函数向文件中写数据时写入失败。例如:
打开一个名为“my_file.txt”的文件,以写入模式('w')打开,将其赋值给变量 f 。 f 写入 "http://c.biancheng.net/shell/" 。
程序执行完毕后,Python 解释器没有报错。然而,当打开 my_file.txt 文件时可以发现,文件根本没有被成功写入。这是因为,当向以文本格式(而非二进制格式)打开的文件写入数据时,Python 出于效率方面的考虑,会先把数据暂存到缓冲区里。只有当使用 close()函数将文件关闭时,才会把缓冲区中的数据切实地写入到文件中。
因此,在上面程序的最后添加如下代码:
f.close()
运行程序后,会看到“http://c.biancheng.net/shell/”被成功写入到了 a.txt 文件。
在某些实际场景里,我们或许需要把数据成功写入到文件当中,然而却不想关闭文件。这是能够做到的,只需调用 flush()函数就可以了,例如:
f = open("my_file.txt", 'w')
f 写入“http://c.biancheng.net/shell/”。
f.flush()
打开 my_file.txt 文件,能够发现已经成功地将字符串“”写入到了该文件中。