Как безопасно открывать / закрывать файлы в 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?
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и " pythonclosefrom 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