什么时候关闭文件?
# Read all data from input file
mergeData = open( "myinput.txt","r" )
allData = mergeData.read()
mergeData.close()
我可以替换此代码吗?
allData = read.open( "myinput.txt","r" )
我想知道文件什么时候关闭?将关闭一个语句运行?或等到程序退出。
当对象被删除时,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
是的。是的你可以。没有内存泄漏或类似的东西。
file
在返回的对象open()
超出范围并被垃圾回收后,文件句柄将很快关闭。
尽管如果您愿意,您可能希望执行以下操作:
with open('myinput.txt') as f:
data = f.read()
这将确保文件在您完成后立即关闭。