繁体   English   中英

在python c = pickle.load(open(fileName,'r'))这会关闭文件吗?

[英]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的生命周期

不,它不会关闭文件。 这是您可以使用with运算符的地方:

with open('path/to/file') as infile:
    c = pickle.load(f)

进一步阅读: 这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM