Как открыть несколько файлов с помощью "с открытым" в Python?
Я хочу изменить пару файлов за один раз, iff, я могу написать для всех из них. Мне интересно, могу ли я каким-то образом объединить несколько открытых вызовов с оператором with
:
try:
with open('a', 'w') as a and open('b', 'w') as b:
do_something()
except IOError as e:
print 'Operation failed: %s' % e.strerror
Если это невозможно, будет ли это элегантное решение этой проблемы?
Ответы
Ответ 1
По состоянию на Python 2.7 (или 3.1 соответственно) вы можете написать
with open('a', 'w') as a, open('b', 'w') as b:
do_something()
В более ранних версиях Python вы иногда можете использовать
contextlib.nested()
для размещения контекстных менеджеров. Это не будет работать, как ожидалось, для открытия многократных файлов, однако - подробности см. В связанной документации.
Ответ 2
Просто замените and
на ,
, и все будет готово:
try:
with open('a', 'w') as a, open('b', 'w') as b:
do_something()
except IOError as e:
print 'Operation failed: %s' % e.strerror
Ответ 3
Для открытия многих файлов одновременно или для длинных путей файлов может оказаться полезным разбить вещи на несколько строк. Из Руководство по стилю Python, как было предложено @Sven Marnach в комментариях к другому ответу:
with open('/path/to/InFile.ext', 'r') as file_1, \
open('/path/to/OutFile.ext', 'w') as file_2:
file_2.write(file_1.read())