В этой простой файловой операции ввода-вывода x.txt
закрывается в конце f.read
? Кроме того, как мне проверить, открыт ли этот файл или нет?
with open("x.txt") as f:
data = f.read()
В этой простой файловой операции ввода-вывода x.txt
закрывается в конце f.read
? Кроме того, как мне проверить, открыт ли этот файл или нет?
with open("x.txt") as f:
data = f.read()
Хорошей практикой является использование ключевого слова with при работе с файловыми объектами. Это имеет то преимущество, что файл правильно закрывается после завершения его пакета, даже если в пути возникает исключение. Это также намного короче, чем написание эквивалентных блоков try-finally:
with
) встроенные объекты еще не поддерживали интерфейс менеджера контекста.
- person ivan_pozdeev; 20.11.2014
Файловый объект, на который ссылается f
, будет закрыт, когда управление покинет блок кода оператора with. На самом деле, именно поэтому вы используете оператор with, чтобы открыть файл в первую очередь. Кроме автоматического закрытия файла по завершении, эта конструкция не имеет смысла.
Вы можете проверить это сами, распечатав флаг f.closed
:
with open("x.txt") as f:
data = f.read()
## Still inside with block ##
print f.closed # Output: False
## Outside of with block ##
print f.closed # Output: True
print f.closed
внутри оператора with
, чтобы показать, где именно это происходит (в частности, различие, сделанное Рафаэлем Барросом в комментарии).
- person abarnert; 20.11.2014
with
закроет файл. - person Cory Kramer   schedule 20.11.2014read
, вы можете снова прочитать файл, если запуститеf.seek(0)
. - person Rafael Barros   schedule 20.11.2014