Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python2.4中安全地打开/关闭文件_Python_File Io_Python 2.4 - Fatal编程技术网

如何在Python2.4中安全地打开/关闭文件

如何在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()将其关闭,并释放打开的

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

直到2.5发布,我才开始使用Python,所以我习惯了这种形式:

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

需要知道打开文件多少次才能关闭该时间。

在上述解决方案中,重复如下:

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