Несколько переменных в операторе 'with'?
Вопрос: Можно ли объявить несколько переменных с помощью оператора with
в Python?
Я пытаюсь использовать оператор with
в Python для открытия нескольких файлов одновременно. Что-то вроде следующего кода:
from __future__ import with_statement
with open("out.txt", "wt"), open("in.txt") as file_out, file_in:
for line in file_in:
file_out.write(line)
Однако у меня возникает вопрос: возможно ли объявить несколько переменных с помощью этого оператора так, как я это сделал выше? Или проблема заключается в том, что очистка нескольких ресурсов одновременно не поддерживается?
Буду признателен за любую помощь или информацию по этому вопросу!
2 ответ(ов)
Я думаю, вам нужно сделать это вместо этого:
from __future__ import with_statement
with open("out.txt", "wt") as file_out:
with open("in.txt") as file_in:
for line in file_in:
file_out.write(line)
Этот код открывает файл in.txt
для чтения и файл out.txt
для записи, и копирует содержимое одного файла в другой с помощью конструкции with
, которая автоматически управляет контекстом и закрывает файлы после завершения работы.
В Python 3.1 и выше вы можете указывать несколько контекстных выражений в конструкции with
, и они будут обрабатываться так, как будто несколько операторов with
вложены друг в друга:
with A() as a, B() as b:
suite
эквивалентно следующему:
with A() as a:
with B() as b:
suite
Это также означает, что вы можете использовать переменную, определённую в первом выражении, во втором (что полезно при работе с соединениями с базой данных и курсорами):
with get_conn() as conn, conn.cursor() as cursor:
cursor.execute(sql)
Таким образом, вы можете эффективно управлять ресурсами, избегая избыточного кода и обеспечивая более читаемое оформление.
Как клонировать список, чтобы он не изменялся неожиданно после присваивания?
Преобразование списка словарей в DataFrame pandas
Как отсортировать список/кортеж списков/кортежей по элементу на заданном индексе
Как отменить последнюю миграцию?
Как явно освободить память в Python?