2016-05-29 69 views

回答

3

它会(可能会看到评论)在收集垃圾时被关闭;然而,处理它最彻底的方法是with块中:

with open(file, "r") as datafile: 
    data = datafile.read() 

如果过程是短暂的,它应该不会造成太大的麻烦,但它是很好的做法,尽快释放手柄,因为它成为不必要。

+1

“除非你关闭文件,是,它将保持开放。“这不是真的:在CPython中,临时文件对象将立即被垃圾回收并关闭。在其他Python变体(IronPython,Jython)中,下次运行垃圾收集时,文件对象将被关闭。 –

+0

是按照标准还是依赖于实施? – Tordek

+1

是的,它不是语言参考本身的一部分;该行为绝对依赖于实现。有趣的是,当文件对象垃圾被收集时,我甚至都无法在文档中找到关于文件自动关闭的提及:你会认为这是明确的。 (也许我只是想念它。) –

3

在CPython中,open(file)的结果在.read()完成后没有任何引用,如果没有例外,那么它将立即被垃圾收集,从而导致它关闭。

但是不要这样做。发挥便利功能:

def read_file(path): 
    with open(path) as f: 
     return f.read() 

data = read_file(path) 

另外,不要为保存一行代码而烦恼。这种态度会导致错误的代码。

0

是的,这将继续开放,我的方式来打开数据是这样的:

with open("file","rb") as f: 
     data=f.readlines() 

datas=open("file","rb") 
data=datas.readlines() 

希望我能帮助你