write variable read print open create python file-io

variable - python readline



¿Cómo puedo abrir varios archivos usando "con abrir" en Python? (5)

Quiero cambiar un par de archivos a la vez, si puedo escribirles a todos. Me pregunto si de alguna manera puedo combinar las múltiples llamadas abiertas con la declaración 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

Si eso no es posible, ¿cómo sería una solución elegante para este problema?


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 puedes usar contextlib.nested() para anidar administradores de contexto. Sin embargo, esto no funcionará como se esperaba para abrir archivos de múltiplos; consulte la documentación vinculada para obtener más detalles.


Con Python 2.6 no funcionará, tenemos que usar la siguiente forma de abrir varios archivos:

with open(''a'', ''w'') as a: with open(''b'', ''w'') as b:


Los anidados con declaraciones harán el mismo trabajo y, en mi opinión, son más sencillos de tratar.

Digamos que tiene inFile.txt, y quiere escribirlo en dos outFile''s simultáneamente.

with open("inFile.txt", ''r'') as fr: with open("outFile1.txt", ''w'') as fw1: with open("outFile2.txt", ''w'') as fw2: for line in fr.readlines(): fw1.writelines(line) fw2.writelines(line)

EDITAR:

No entiendo el motivo del downvote. Probé mi código antes de publicar mi respuesta, y funciona como se desea: escribe en todos los archivos de salida, tal como lo plantea la pregunta. No hay escritura duplicada o no se puede escribir. Así que tengo mucha curiosidad por saber por qué mi respuesta se considera incorrecta, subóptima o algo así.


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 sugerida por @Sven Marnach en 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())


Simplemente reemplaza and con , y 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