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