确保文件在Python中关闭

时间:2012-10-22 16:00:13

标签: python file-io

我有可以将文件作为参数的类,例如:

ParserClass(file('/some/file', 'rb'))

如果我正确理解Python,一旦对象被垃圾收集,该文件将自动关闭。我不明白的是当这种情况发生时。在如下的函数中:

def parse_stuff(filename):
    parser = ParserClasss(file(filename, 'rb'))

    return list(parser.info())

在函数退出后,不应该立即对parser对象进行GC会导致文件被关闭吗?然而,出于某种原因,Python似乎在函数退出后很长时间才打开文件。或者至少它看起来那样,因为Windows不会让我修改文件,声称Python打开它并迫使我关闭IDLE。

有没有办法确保文件关闭,没有明确要求我创建的每个文件?我还想补充一点,这些类是外部的,我不想通过它们来深入了解它们与文件的对应关系。

2 个答案:

答案 0 :(得分:12)

您可以使用with语句打开文件,以确保文件已关闭。

with open('/some/file', 'rb') as f:
    parser = ParserClasss(f)
    return list(parser.info())

有关详细信息,请参阅http://www.python.org/dev/peps/pep-0343/

答案 1 :(得分:5)

您可以使用with打开文件。当您使用with时,退出with块时将隐式关闭该文件,并且它也将处理异常状态。