write - readlines python




Comment puis-je ouvrir plusieurs fichiers en utilisant "with open" en Python? (4)

Je veux changer quelques fichiers en même temps, si je peux écrire à tous. Je me demande si je peux combiner les multiples appels ouverts avec l'instruction 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 ce n'est pas possible, à quoi ressemblerait une solution élégante à ce problème?


À partir de Python 2.7 (ou 3.1 respectivement), vous pouvez écrire

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

Dans les versions antérieures de Python, vous pouvez parfois utiliser contextlib.nested() pour imbriquer les gestionnaires de contextes. Cela ne fonctionnera pas comme prévu pour l'ouverture de fichiers multiples, cependant - voir la documentation liée pour plus de détails.


Avec python 2.6 Cela ne marchera pas, nous devons utiliser la méthode ci-dessous pour ouvrir plusieurs fichiers:

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

Imbriqués avec des déclarations feront le même travail, et à mon avis, sont plus simples à traiter.

Disons que vous avez inFile.txt, et que vous voulez l'écrire dans deux outFile simultanément.

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)

MODIFIER:

Je ne comprends pas la raison de la downvote. J'ai testé mon code avant de publier ma réponse, et cela fonctionne comme je le souhaite: Il écrit à tout outFile, comme la question le demande. Pas d'écriture en double ou ne pas écrire. Donc, je suis vraiment curieux de savoir pourquoi ma réponse est considérée comme fausse, sous-optimale ou quelque chose comme ça.


Pour ouvrir plusieurs fichiers à la fois ou pour des chemins de fichiers longs, il peut être utile de décomposer les choses sur plusieurs lignes. Du Guide de style Python suggéré par @Sven Marnach dans les commentaires à une autre réponse:

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())




file-io