如何在python 2.4中安全地打开/关闭文件

时间:2010-09-22 14:37:42

标签: python file io

我目前正在编写一个小脚本,可以在我们的一台服务器上使用Python。服务器只安装了Python 2.4.4。

我没有开始使用Python直到2.5出来,所以我习惯了以下形式:

with open('file.txt', 'r') as f:
    # do stuff with f

但是,2.5之前没有with语句,而且我无法找到有关手动清理文件对象的正确方法的示例。

使用旧版本的python时,安全处理文件对象的最佳做法是什么?

4 个答案:

答案 0 :(得分:132)

请参阅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()会出错。

答案 1 :(得分:31)

在上述解决方案中,重复此处:

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()

答案 2 :(得分:1)

如果用于以下用途,则无需根据文档关闭文件:

  

在处理文件对象时,最好使用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

答案 3 :(得分:-4)

以下是给出的示例,以及如何使用open和" python close

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()

打开文件的次数必须关闭那些时间。