[英]In python c = pickle.load(open(fileName, 'r')) does this close the file?
我试过谷歌但找不到答案。
如果我这样做
c = pickle.load(open(fileName, 'r'))
此操作后文件是否会自动关闭?
不,但您可以简单地调整它以关闭文件:
# file not yet opened
with open(fileName, 'r') as f:
# file opened
c = pickle.load(f)
# file opened
# file closed
with
语句的作用是(除其他外)调用with
语句中列出的对象的__exit__()
方法(在本例中为:打开的文件),在这种情况下关闭文件。
关于打开文件的__exit__()
方法:
>>> f = open('deleteme.txt', 'w')
>>> help(f.__exit__)
Help on built-in function __exit__:
__exit__(...)
__exit__(*excinfo) -> None. Closes the file.
我讨厌吹毛求疵,但答案是yes 或 no - 这依赖于你所要求的。
写入的行是否会关闭文件描述符? 是。
这次手术后会自动发生吗? 是的......但可能不会马上 。
这行后会立即关闭文件吗? 不,不太可能(见上面的答复)。
当文件对象的引用计数为零时,Python将删除文件描述符。 如果要在本地范围中打开文件,例如在函数内部(或者您已经完成,或者即使已将其分配给def
的局部变量),则清除本地范围时 - 以及没有剩余的文件对象引用,文件将被关闭。
然而,明确一个更好的选择,并在with
块中打开文件 - 这将为您关闭文件,而不是等待垃圾收集器启动。
在无意中将文件描述符分配给局部变量的情况下,您还必须小心......(请参阅: 在python中打开文件描述符 )但您没有这样做。 还可以在这里查看答案(请参阅: 查看哪些文件在Python中打开 ),以便您可以检查哪些文件描述符是打开的,以及您所使用的操作系统的不同变体。
是的, open
的返回值只有pickle.load
调用的生命周期。 它在关闭时关闭打开的文件描述符。
如果你非常偏执,请考虑:
with open(fileName,'r') as fin:
c = pickle.load(fin)
with
关键字确定了fin
的生命周期
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.