Как безопасно открывать / закрывать файлы в Python 2.4 - PullRequest
80 голосов
/ 22 сентября 2010

В настоящее время я пишу небольшой скрипт для использования на одном из наших серверов с использованием Python. На сервере установлен только Python 2.4.4.

Я не начал использовать Python, пока не вышел 2.5, поэтому я привык к форме:

with open('file.txt', 'r') as f:
    # do stuff with f

Однако до 2.5 нет оператора with, и я не могу найти примеры правильного способа очистки файлового объекта вручную.

Каков наилучший способ безопасного удаления файловых объектов при использовании старых версий python?

Ответы [ 4 ]

133 голосов
/ 22 сентября 2010

См. docs.python.org :

Когда вы закончите работу с файлом, вызовите f.close (), чтобы закрыть его и освободить все занятые системные ресурсы.вверх по открытому файлу.После вызова f.close () попытки использования файлового объекта автоматически завершатся неудачей.

Следовательно, элегантно используйте close() с try/finally:

f = open('file.txt', 'r')

try:
    # do stuff with f
finally:
    f.close()

Это гарантирует, чтодаже если # do stuff with f вызывает исключение, f все равно будет правильно закрыто.

Обратите внимание, что open должно появиться за пределами из try.Если open само вызывает исключение, файл не был открыт и не нуждается в закрытии.Кроме того, если open вызывает исключение, его результатом является , а не , присвоенный f, и это ошибка для вызова f.close().

32 голосов
/ 23 февраля 2015

В приведенном выше решении, повторяется здесь:

f = open('file.txt', 'r')

try:
    # do stuff with f
finally:
   f.close()

если что-то плохое случится (вы никогда не узнаете ...) после успешного открытия файла и перед попыткой, файл не будет закрыт, поэтомуболее безопасное решение:

f = None
try:
    f = open('file.txt', 'r')

    # do stuff with f

finally:
    if f is not None:
       f.close()
2 голосов
/ 23 февраля 2019

Нет необходимости закрывать файл в соответствии с документами, если вы используете:

Рекомендуется использовать ключевое слово with при работе с объектами файла. Преимущество этого заключается в том, что файл правильно закрывается после завершения его набора, даже если по пути возникает исключение. Это также намного короче, чем написание эквивалентных блоков try-finally:

>>> with open('workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

Подробнее здесь: https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

0 голосов
/ 15 апреля 2014

Вот пример, который так, как использовать open и "python close

from sys import argv
script,filename=argv
txt=open(filename)
print "filename %r" %(filename)
print txt.read()
txt.close()
print "Change the file name"
file_again=raw_input('>')
print "New file name %r" %(file_again)
txt_again=open(file_again)
print txt_again.read()
txt_again.close()

Необходимо, сколько раз вы открывали файл, чтобы закрыть это время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...