如何在Python2.4中安全地打开/关闭文件
我目前正在编写一个小脚本,用Python在我们的一个服务器上使用。服务器只安装了Python 2.4.4 直到2.5发布,我才开始使用Python,所以我习惯了这种形式:如何在Python2.4中安全地打开/关闭文件,python,file-io,python-2.4,Python,File Io,Python 2.4,我目前正在编写一个小脚本,用Python在我们的一个服务器上使用。服务器只安装了Python 2.4.4 直到2.5发布,我才开始使用Python,所以我习惯了这种形式: with open('file.txt', 'r') as f: # do stuff with f 然而,在2.5版本之前的语句中没有,我很难找到关于手动清理文件对象的正确方法的示例 在使用旧版本的python时,安全处理文件对象的最佳做法是什么?请参阅: 处理完文件后,调用f.close()将其关闭,并释放打开的
with open('file.txt', 'r') as f:
# do stuff with f
然而,在2.5版本之前的语句中没有,我很难找到关于手动清理文件对象的正确方法的示例
在使用旧版本的python时,安全处理文件对象的最佳做法是什么?请参阅:
处理完文件后,调用f.close()将其关闭,并释放打开的文件占用的所有系统资源。调用f.close()后,尝试使用文件对象将自动失败
因此,将close()
优雅地与try/finally
配合使用:
f = open('file.txt', 'r')
try:
# do stuff with f
finally:
f.close()
这确保了即使#do stuff
引发异常,f
仍将正确关闭
请注意,open
应该出现在try
之外。如果open
本身引发异常,则文件未打开,不需要关闭。此外,如果open
引发异常,则其结果不会分配给f
,调用f.close()
是一个错误。这里给出了如何使用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()
需要知道打开文件多少次才能关闭该时间。在上述解决方案中,重复如下:
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块短得多:
更多信息:非常简单,谢谢。出于某种原因,我希望我需要更多的参与。如果open
失败,甚至在try/finally
块输入之前,将引发异常。因此不会调用close
。(这就是为什么您应该在try
之前调用open
)@TM我添加了一条关于引发异常的注释。open
。这是with语句在幕后翻译的内容。打开文件应该在try中进行。如果在open
之后但在close
之前引发异常,则无法使用此方法正确关闭文件。使用with
或try
/最后
即使存在异常,也会正确关闭文件。使用with open(…)语句,无论with块如何完成(即使存在异常)文件closed@darkgaze和open(…)
绝对是现代Python中的最佳选择。这是正确的,并且忽略了这个问题。
>>> with open('workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True