Скажем, у меня есть следующий код:
remote = urlopen('www...../file.txt')
with open(file='file', mode='wb') as local:
local.write(remote.read())
Нужно ли мне также делать:
local.close()
remote.close()
Как я узнаю, когда close()
нужен, а когда Python позаботится об этом за меня?
Это может быть полезно: stackoverflow.com/questions/17459867/…
@ConsistentProgrammer, а как насчет urlopen?
@Luis: я только хотел поделиться информацией об открытии/закрытии файла
@Luis Используйте with
и для этого, и это будет сделано автоматически.
Что документация по Python говорит о urlopen
?
@Barmar, ты имеешь в виду вложенные?
В одной строке может быть несколько with
. with urlopen(...) as remote, open(...) as local:
Если вы используете диспетчер контекста (что и является оператором «with..»), вам не нужно использовать .close
.
В этом случае Python управляет ресурсами за вас. Этот — хорошая статья, в которой подробно рассказывается, как это работает.
Хорошей практикой является использование контекстных менеджеров, когда это возможно, и вы можете создать свой собственный с помощью библиотеки контекстная библиотека.
Вам не нужно явно закрывать файл, когда вы используете оператор python with
. Итак, у вас все хорошо с local
объектом. И эта почта объясняет, почему вы должны явно закрыть ресурс remote
.
когда вы открываете файл с помощью
with
, Python позаботится об этом.