Solución:
A partir de Python 2.7 (o 3.1 respectivamente) puede escribir
with open('a', 'w') as a, open('b', 'w') as b:
do_something()
En versiones anteriores de Python, a veces puede usar
contextlib.nested()
para anidar administradores de contexto. Sin embargo, esto no funcionará como se esperaba para abrir varios archivos; consulte la documentación vinculada para obtener más detalles.
En el raro caso de que desee abrir un número variable de archivos al mismo tiempo, puede utilizar contextlib.ExitStack
, a partir de la versión 3.3 de Python:
with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in filenames]
# Do something with "files"
Sin embargo, la mayoría de las veces tiene un conjunto variable de archivos, es probable que desee abrirlos uno tras otro.
Solo reemplaza and
con ,
y tu estas listo:
try:
with open('a', 'w') as a, open('b', 'w') as b:
do_something()
except IOError as e:
print 'Operation failed: %s' % e.strerror
Para abrir muchos archivos a la vez o para rutas de archivo largas, puede ser útil dividir las cosas en varias líneas. De la Guía de estilo de Python como lo sugiere @Sven Marnach en los comentarios a otra respuesta:
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())