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

时间:2013-08-01 04:20:36

标签: python pickle

我试过谷歌但找不到答案。

如果我这样做

c = pickle.load(open(fileName, 'r'))

此操作后文件会自动关闭吗?

4 个答案:

答案 0 :(得分:9)

不,但你可以简单地调整它以关闭文件:

# file not yet opened
with open(fileName, 'r') as f:
    # file opened
    c = pickle.load(f)
    # file opened
# file closed

with语句的作用是(除其他事项外)调用__exit__()语句中列出的with对象方法(在本例中为:打开文件),在这种情况下关闭文件。

关于打开文件的__exit__()方法:

>>> f = open('deleteme.txt', 'w')
>>> help(f.__exit__)
Help on built-in function __exit__:

__exit__(...)
    __exit__(*excinfo) -> None.  Closes the file.

答案 1 :(得分:3)

我讨厌分裂,但答案是 是或否 - 取决于完全你在问什么。

  

写入的行是否会关闭文件描述符?

     

此操作后会自动发生吗? 是...   但可能不是立即

     

此行后会立即关闭文件吗? 不,不太可能(见上面的回复)。

当文件对象的引用计数为零时,Python将删除文件描述符。如果要在本地作用域中打开文件,例如在函数内部(或者已经完成,或者即使已将其分配给def内的局部变量),也要清除本地作用域 - 如果没有对文件对象的剩余引用,则文件将被关闭。

然而,显式是一个更好的选择,并在with块中打开文件 - 这将为您关闭文件,而不是等待垃圾收集器启动。

在无意中将文件描述符分配给局部变量的情况下,您还必须小心......(请参阅:opened file descriptors in python)但您没有这样做。另请查看这里的答案(请参阅:check what files are open in Python),了解一些可以检查哪些文件描述符是打开的方法,以及适用于您所使用的操作系统的不同变体。

答案 2 :(得分:2)

是的,open的返回值的生命周期仅为pickle.load调用的生命周期。它在关闭时关闭打开的文件描述符。

如果你非常偏执,请考虑:

with open(fileName,'r') as fin:
    c = pickle.load(fin)

with关键字确定fin

的生命周期

答案 3 :(得分:0)

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

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

进一步阅读:thisthis