Что я могу сделать с закрытым файлом?

Когда вы открываете файл, он хранится в объекте открытого файла, который дает вам доступ к различным методам, например, чтению или записи.

>>> 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

Одно использование использует имя для повторного открытия файла:

open(f.name).read()

Я использую атрибут name при изменении содержимого файла с помощью NamedTemporaryFile, чтобы записать обновленный контент, а затем заменить исходный файл на 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 чтобы проверить, действительно ли файл закрыт.