为了缩短代码一点,我使用的是这样的:打开(file).read()命令后,文本文件是否仍然打开?
data = open(file).read()
这是不可能的data.close()
因为data
关闭它是一个字符串,所以我问一个问题:如果该行被读取后,是文件还是打开?我需要打扰以某种方式关闭它吗?
为了缩短代码一点,我使用的是这样的:打开(file).read()命令后,文本文件是否仍然打开?
data = open(file).read()
这是不可能的data.close()
因为data
关闭它是一个字符串,所以我问一个问题:如果该行被读取后,是文件还是打开?我需要打扰以某种方式关闭它吗?
它会(可能会看到评论)在收集垃圾时被关闭;然而,处理它最彻底的方法是with
块中:
with open(file, "r") as datafile:
data = datafile.read()
如果过程是短暂的,它应该不会造成太大的麻烦,但它是很好的做法,尽快释放手柄,因为它成为不必要。
在CPython中,open(file)
的结果在.read()
完成后没有任何引用,如果没有例外,那么它将立即被垃圾收集,从而导致它关闭。
但是不要这样做。发挥便利功能:
def read_file(path):
with open(path) as f:
return f.read()
data = read_file(path)
另外,不要为保存一行代码而烦恼。这种态度会导致错误的代码。
是的,这将继续开放,我的方式来打开数据是这样的:
with open("file","rb") as f:
data=f.readlines()
或
datas=open("file","rb")
data=datas.readlines()
希望我能帮助你
“除非你关闭文件,是,它将保持开放。“这不是真的:在CPython中,临时文件对象将立即被垃圾回收并关闭。在其他Python变体(IronPython,Jython)中,下次运行垃圾收集时,文件对象将被关闭。 –
是按照标准还是依赖于实施? – Tordek
是的,它不是语言参考本身的一部分;该行为绝对依赖于实现。有趣的是,当文件对象垃圾被收集时,我甚至都无法在文档中找到关于文件自动关闭的提及:你会认为这是明确的。 (也许我只是想念它。) –