- en
- Language: ru
- Documentation version: latest
Закрытие файлов
Примечание
В реальной жизни для закрытия файлов чаще всего используется
конструкция with
. Её намного удобней использовать, чем закрывать
файл явно. Но, так как в жизни можно встретить и метод close
, в
этом разделе рассматривается как его использовать.
После завершения работы с файлом, его нужно закрыть. В некоторых случаях Python может самостоятельно закрыть файл. Но лучше на это не рассчитывать и закрывать файл явно.
close()
Метод close встречался в разделе запись файлов. Там он был нужен для того, чтобы содержимое файла было записано на диск.
Для этого, в Python есть отдельный метод flush()
.
Но так как в примере с записью файлов, не нужно было больше
выполнять никаких операций, файл можно было закрыть.
Откроем файл r1.txt:
In [1]: f = open('r1.txt', 'r')
Теперь можно считать содержимое:
In [2]: print(f.read())
!
service timestamps debug datetime msec localtime show-timezone year
service timestamps log datetime msec localtime show-timezone year
service password-encryption
service sequence-numbers
!
no ip domain lookup
!
ip ssh version 2
!
У объекта file есть специальный атрибут closed
, который позволяет
проверить, закрыт файл или нет.
Если файл открыт, он возвращает False
:
In [3]: f.closed
Out[3]: False
Теперь закрываем файл и снова проверяем closed
:
In [4]: f.close()
In [5]: f.closed
Out[5]: True
Если попробовать прочитать файл, возникнет исключение:
In [6]: print(f.read())
------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-53-2c962247edc5> in <module>()
----> 1 print(f.read())
ValueError: I/O operation on closed file
Использование try/finally
для работы с файлами
С помощью обработки исключений, можно:
перехватывать исключения, которые возникают, при попытке прочитать несуществующий файл
закрывать файл, после всех операций, в блоке
finally
Если попытаться открыть для чтения файл, которого не существует, возникнет такое исключение:
In [7]: f = open('r3.txt', 'r')
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
<ipython-input-54-1a33581ca641> in <module>()
----> 1 f = open('r3.txt', 'r')
IOError: [Errno 2] No such file or directory: 'r3.txt'
С помощью конструкции try/except
, можно перехватить это исключение и
вывести своё сообщение:
In [8]: try:
....: f = open('r3.txt', 'r')
....: except IOError:
....: print('No such file')
....:
No such file
А с помощью части finally
, можно закрыть файл, после всех операций:
In [9]: try:
....: f = open('r1.txt', 'r')
....: print(f.read())
....: except IOError:
....: print('No such file')
....: finally:
....: f.close()
....:
!
service timestamps debug datetime msec localtime show-timezone year
service timestamps log datetime msec localtime show-timezone year
service password-encryption
service sequence-numbers
!
no ip domain lookup
!
ip ssh version 2
!
In [10]: f.closed
Out[10]: True