Объясните конструкцию with as
Есть небольшой пример вызова этой конструкции для открытия файлов:
# method1
with open('group.pickle', 'wb') as p:
p.write(ser_pickle)
#method2
with open('group.pickle', 'wb') as p:
pickle.dump(my_favourite_group, p)
#method1
with open('group.json', 'w', encoding='utf-8') as j:
j.write(ser_json)
#method2
with open('group.json', 'w') as j:
json.dump(my_favourite_group, j)
Что в данном случае значат части когда "as j: as p:", что за j и p?
Ответы (1 шт):
Чтение и запись файлов.
f = open('workfile', 'w')
open() возвращает объект файла
и чаще всего используется с двумя аргументами: open(имя файла, режим).
Хорошей практикой является использование ключевого слова with при работе с файловыми объектами.
Преимущество заключается в том, что файл правильно закрывается после завершения его набора,
даже если в какой-то момент возникает исключение.
Использование with также намного короче, чем написание эквивалентных блоков try-finally:
with open('workfile') as f: # файловый объект с именем `f`
Если вы не используете ключевое слово with, вам следует вызвать f.close(),
чтобы закрыть файл и немедленно освободить все используемые им системные ресурсы.
Если вы явно не закроете файл, сборщик мусора в Python в конечном итоге уничтожит
объект и закроет открытый файл для вас, но файл может оставаться открытым некоторое время.
Другой риск состоит в том, что разные реализации Python будут выполнять эту очистку в разное время.
Update
А можете подробнее объяснить то, что мы обсудили в комментариях? Чем в вашем коде является f? Она же не хранит сам файл?
Сам файл у вас находится где-то на диске, файловый объект с именем f содержит все необходимое для работы с этим файлом.
with open('test.txt') as f: # файловый объект с именем `f`
print(f)
print(type(f))
print(help(f))
print(dir(f))
print(f.__doc__)
# ...