代码之家  ›  专栏  ›  技术社区  ›  TM. Randy Simon

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

  •  78
  • TM. Randy Simon  · 技术社区  · 14 年前

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

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

    但是,没有 with 语句,我很难找到有关手动清理文件对象的正确方法的示例。

    4 回复  |  直到 5 年前
        1
  •  141
  •   The_Modeler Diego Sevilla    6 年前

    看到了吗 docs.python.org :

    处理完一个文件后,调用f.close()将其关闭,并释放打开的文件占用的所有系统资源。调用f.close()后,尝试使用file对象将自动失败。

    因此使用 close() 优雅地 try/finally

    f = open('file.txt', 'r')
    
    try:
        # do stuff with f
    finally:
        f.close()
    

    这确保了即使 # do stuff with f f 仍将正确关闭。

    open 应该出现 try . 如果 它本身会引发一个异常,文件未打开,不需要关闭。另外,如果 打开 分配给 f级 打电话是错误的 f.close() .

        2
  •  32
  •   mljrg    10 年前

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

    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()
    
        3
  •  12
  •   user3765030    6 年前

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

        4
  •  -4
  •   Noufal Ibrahim    10 年前

    下面是一个如何使用的例子 open 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()
    

    有必要知道你打开文件多少次才能关闭这些时间。