文件什么时候关闭?
# Read all data from input file
mergeData = open( "myinput.txt","r" )
allData = mergeData.read()
mergeData.close()
我可以替换此代码吗?
allData = read.open( "myinput.txt","r" )
我想知道该文件何时关闭?该声明是否会被关闭?或者等到程序退出。
答案 0 :(得分:4)
CPython在删除对象时自动关闭文件对象;当它的引用计数降为零时它被删除(没有更多的变量引用它)。因此,如果在函数中使用mergeData
,则只要函数完成,就会清除局部变量并关闭文件。
如果使用allData = open( "myinput.txt","r" ).read()
,引用计数会在.read()
返回时降至0,而在CPython上则表示文件在那时关闭。
在其他实现(如Jython或IronPython)中,对象生存期的管理方式不同,实际删除对象的时间可能要晚得多。
使用文件的最佳方式是作为上下文管理器:
with open( "myinput.txt","r" ) as mergeData:
allData = mergeData.read()
自动调用.close()
上的mergeData
。请参阅file.open()
documentation和with
statement的文档。
答案 1 :(得分:2)
是。是的你可以。没有内存泄漏或任何类型的内容。
file
返回的open()
对象超出范围并被垃圾收集后,文件句柄将很快关闭。
虽然如果您愿意,您可能希望做以下事情:
with open('myinput.txt') as f:
data = f.read()
这将确保文件在您完成后立即关闭。