0

什么时候关闭文件?

    # Read all data from input file
    mergeData = open( "myinput.txt","r" )
    allData = mergeData.read()
    mergeData.close()

我可以替换此代码吗?

allData = read.open( "myinput.txt","r" )

我想知道文件什么时候关闭?将关闭一个语句运行?或等到程序退出。

4

2 回答 2

5

当对象被删除时,CPython 会自动关闭一个文件对象;当它的引用计数下降到零时它被删除(没有更多的变量引用它)。所以如果你mergeData在一个函数中使用,一旦函数完成,局部变量就会被清理掉,文件也会被关闭。

如果您使用allData = open( "myinput.txt","r" ).read()引用计数下降到 0 的那一刻.read()返回,并且在 CPython 上这意味着文件在那里关闭。

在 Jython 或 IronPython 等其他实现中,对象生命周期的管理方式不同,实际删除对象的那一刻可能要晚得多。

不过,使用文件的最佳方式是作为上下文管理器:

with open( "myinput.txt","r" ) as mergeData:
    allData = mergeData.read()

它会自动调用.close()。请参阅文档声明的文档。mergeData file.open()with

于 2013-02-26T21:11:47.460 回答
2

是的。是的你可以。没有内存泄漏或类似的东西。

file在返回的对象open()超出范围并被垃圾回收后,文件句柄将很快关闭。

尽管如果您愿意,您可能希望执行以下操作:

with open('myinput.txt') as f:
    data = f.read()

这将确保文件在您完成后立即关闭。

于 2013-02-26T21:12:25.833 回答