【发布时间】:2014-04-29 14:32:38
【问题描述】:
我写了以下内容:
y=open('S:\\02012014EASTERN.TXT','r').readlines()
我不知道该文件现在是否已关闭。我该如何测试?
【问题讨论】:
标签: python file python-3.x
我写了以下内容:
y=open('S:\\02012014EASTERN.TXT','r').readlines()
我不知道该文件现在是否已关闭。我该如何测试?
【问题讨论】:
标签: python file python-3.x
您无法对此进行测试,因为您从未存储对文件对象的引用。
最好将文件对象用作上下文管理器,这样可以确保关闭文件对象:
with open('S:\\02012014EASTERN.TXT','r') as ofh:
y = ofh.readlines()
因为 CPython 使用引用计数,所以在您的代码中文件对象将立即关闭并清除,但您不能指望在垃圾收集可能延迟的其他 Python 实现中这种行为。
【讨论】:
虽然其他答案为您提供了最佳方法(使用 'with' 语句),但如果您感到好奇,您可以这样做:
f = open('S:\\02012014EASTERN.TXT','r')
y = f.readlines()
print(f.closed)
f.close()
print(f.closed)
第一个“打印”语句将产生“假”,第二个将产生“真”。
但同样,在“真实”代码中,请改用“with”结构。它将为您完成关闭。
【讨论】:
用途:
with open(file) as f:
your code here
它会在with语句块结束后调用__exit__方法来确保文件被关闭。
【讨论】: