Как безопасно открывать / закрывать файлы в python 2.4



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



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



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


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



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

628   3  

3 ответов:

см.docs.python.org:

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

следовательно использовать 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().

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

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

вот пример, который так как использовать 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()

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

Comments

    Ничего не найдено.