Quiero cambiar un par de archivos a la vez, si puedo escribir en todos ellos. Me pregunto si de alguna manera puedo combinar las múltiples llamadas abiertas con la with
declaración:
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 a este problema?
with
para abrir una lista variable de archivos?ExitStack
partir de Python 3.3. No hay una manera fácil de hacer esto en ninguna versión anterior de Python.Simplemente reemplace
and
con,
y listo:fuente
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:
fuente
Anidado con declaraciones hará el mismo trabajo, y en mi opinión, son más fáciles de manejar.
Digamos que tiene inFile.txt y desea escribirlo en dos outFile's simultáneamente.
EDITAR:
No entiendo la razón del voto negativo. Probé mi código antes de publicar mi respuesta, y funciona según lo deseado: escribe en todos los archivos de outFile, tal como lo hace la pregunta. No hay escritura duplicada o no escribir. Así que tengo mucha curiosidad por saber por qué mi respuesta se considera incorrecta, subóptima o algo así.
fuente
Desde Python 3.3, puede usar la clase
ExitStack
delcontextlib
módulo paraabrir de forma segura un número arbitrario de archivos .
Puede gestionar un número dinámico de objetos sensibles al contexto, lo que significa que resultará especialmente útil. si no sabe cuántos archivos va a manejar .
De hecho, el caso de uso canónico que se menciona en la documentación es administrar una cantidad dinámica de archivos.
Si está interesado en los detalles, aquí hay un ejemplo genérico para explicar cómo
ExitStack
funciona:Salida:
fuente
Con python 2.6 no funcionará, tenemos que usar la siguiente forma para abrir múltiples archivos:
fuente
Respuesta tardía (8 años), pero para alguien que busca unir múltiples archivos en uno , la siguiente función puede ser de ayuda:
fuente