我目前正在编写一个小脚本,用于我们使用 Python 的服务器之一。服务器只安装了 Python 2.4.4。
直到 2.5 出来我才开始使用 Python,所以我习惯了这种形式:
with open('file.txt', 'r') as f:
# do stuff with f
但是,在 2.5 之前没有with
声明,而且我很难找到有关手动清理文件对象的正确方法的示例。
使用旧版本的 python 时,安全处理文件对象的最佳实践是什么?
我目前正在编写一个小脚本,用于我们使用 Python 的服务器之一。服务器只安装了 Python 2.4.4。
直到 2.5 出来我才开始使用 Python,所以我习惯了这种形式:
with open('file.txt', 'r') as f:
# do stuff with f
但是,在 2.5 之前没有with
声明,而且我很难找到有关手动清理文件对象的正确方法的示例。
使用旧版本的 python 时,安全处理文件对象的最佳实践是什么?
请参阅docs.python.org:
完成文件后,调用 f.close() 将其关闭并释放打开文件占用的所有系统资源。调用 f.close() 后,尝试使用文件对象将自动失败。
因此close()
优雅地使用try/finally
:
f = open('file.txt', 'r')
try:
# do stuff with f
finally:
f.close()
这确保即使# do stuff with f
引发异常,f
仍将正确关闭。
注意应该open
出现在. try
如果open
本身引发异常,则该文件没有打开,也不需要关闭。此外,如果open
引发异常,则不会将其结果分配给f
它,并且调用f.close()
.
在上面的解决方案中,这里重复:
f = open('file.txt', 'r')
try:
# do stuff with f
finally:
f.close()
如果在成功打开文件之后和尝试之前发生了不好的事情(你永远不知道......),文件将不会被关闭,因此更安全的解决方案是:
f = None
try:
f = open('file.txt', 'r')
# do stuff with f
finally:
if f is not None:
f.close()
如果您使用以下命令,则无需根据文档关闭文件:
在处理文件对象时,最好使用 with 关键字。这样做的好处是文件在其套件完成后正确关闭,即使在途中引发异常也是如此。它也比编写等效的 try-finally 块短得多:
>>> with open('workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
更多信息:https ://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects
这是给出的示例,如何使用open
和“pythonclose
from sys import argv
script,filename=argv
txt=open(filename)
print "filename %r" %(filename)
print txt.read()
txt.close()
print "Change the file name"
file_again=raw_input('>')
print "New file name %r" %(file_again)
txt_again=open(file_again)
print txt_again.read()
txt_again.close()
您打开文件必须关闭多少次是必要的。