我经常在阅读后关闭文件
for line in open(FileName):
# do something
我也在同一个程序中重新打开文件。
for line in open(FileName):
# do something else
我的问题是这种方法是否有任何缺点? 我看到过声称该文件应该以{{1}}
打开的帖子with
但这种方法的优点是什么?
答案 0 :(得分:4)
在某些情况下,您可能会因为没有关闭文件而没有遇到不利影响。 CPython(最流行的Python实现)将在使用for line in open("filename"):
后立即关闭文件,前提是不存在对该文件的进一步引用。在其他Python实现中,关闭文件可能会延迟,但最终会被关闭。
但是有一些问题:
有时对文件的隐藏引用仍然存在。如果在函数中抛出异常,则与异常关联的回溯包含对函数执行帧的引用,因此所有局部变量都会继续存在 - 即使在CPython中,这也可能使文件保持打开的时间超过预期。
打开许多文件时,您可能会用完文件描述符,因为您无法控制它们再次关闭的时间。
Python 3.2或更高版本将为每个未关闭的文件引发ResourceWarning
(此警告可以被禁用,但无论如何)。
总之,它根本不值得麻烦。始终使用with
,并忘记这些问题。无论如何,有足够的时间记住prgramming。
答案 1 :(得分:0)
重新使用with
:
使用with
打开/管理文件的主要优点是,当您退出与with
关联的“块”时,它们会自动关闭。如果遇到异常,该文件也会关闭。
保留未封闭的文件是不整齐的编程。
请注意,特别是在写入的文件的情况下,您可能无法获得输出文件中所需的所有数据,因为未关闭的文件可能没有刷新所有缓冲区(它会在关闭文件时自动发生),只会产生部分输出文件。
因此,虽然您不必使用with
来打开文件,但它确实可以更轻松地管理它们,并且还可以关闭文件,也就是说,您可以放心一点,这就是推荐的原因。