如何处理已关闭的文件对象?

时间:2015-05-21 16:32:42

标签: python file

当您打开文件时,它会存储在一个打开的文件对象中,通过它可以访问各种方法,例如读取或写入。

>>> f = open("file0")
>>> f
<open file 'file0', mode 'r' at 0x0000000002E51660>

当然,当你完成后,你应该关闭你的文件,以防止它占用内存空间。

>>> f.close()
>>> f
<closed file 'file0', mode 'r' at 0x0000000002E51660>

这会留下一个已关闭的文件,因此该对象仍然存在,但为了便于阅读,它不再使用空格。但这有什么实际应用吗?它无法读取或写入。它不能用于再次重新打开文件。

>>> f.open()

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    f.open()
AttributeError: 'file' object has no attribute 'open'

>>> open(f)

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    open(f)
TypeError: coercing to Unicode: need string or buffer, file found

这个封闭的文件对象是否有实际用途,除了识别文件对象被引用但是已关闭?

1 个答案:

答案 0 :(得分:21)

一种用途是使用名称重新打开文件:

open(f.name).read()

我在使用NamedTemporaryFile更改文件内容时使用name属性来编写更新的内容,然后用shutil.move替换原始文件:

with open("foo.txt") as f, NamedTemporaryFile("w", dir=".", delete=False) as temp:
    for line in f:
        if stuff:
            temp.write("stuff")

shutil.move(temp.name, "foo.txt")

另外,您也可以使用f.closed查看该文件是否已关闭。