Je souhaite modifier quelques fichiers à la fois, si je ne peux pas les écrire tous. Je me demande si je peux en quelque sorte combiner les multiples appels ouverts avec la with
déclaration:
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?
with
pour ouvrir une liste variable de fichiers?ExitStack
partir de Python 3.3. Il n'y a aucun moyen facile de le faire dans une version antérieure de Python.Remplacez simplement
and
par,
et vous avez terminé:la source
Pour ouvrir plusieurs fichiers à la fois ou pour de longs chemins d'accès, il peut être utile de répartir les choses sur plusieurs lignes. Du guide de style Python comme suggéré par @Sven Marnach dans les commentaires à une autre réponse:
la source
Les instructions imbriquées feront le même travail et, à mon avis, sont plus simples à gérer.
Supposons que vous ayez inFile.txt et que vous souhaitiez l'écrire simultanément dans deux outFile.
ÉDITER:
Je ne comprends pas la raison du downvote. J'ai testé mon code avant de publier ma réponse, et cela fonctionne comme vous le souhaitez: il écrit dans tous les fichiers outFile, tout comme la question le demande. Aucune écriture en double ou échec d'écriture. Je suis donc vraiment curieux de savoir pourquoi ma réponse est considérée comme fausse, sous-optimale ou quelque chose comme ça.
la source
Depuis Python 3.3, vous pouvez utiliser la classe
ExitStack
ducontextlib
module pourouvrir en toute sécurité un nombre arbitraire de fichiers .
Il peut gérer un nombre dynamique d'objets contextuels, ce qui signifie qu'il s'avérera particulièrement utile si vous ne savez pas combien de fichiers vous allez gérer .
En fait, le cas d'utilisation canonique mentionné dans la documentation gère un nombre dynamique de fichiers.
Si vous êtes intéressé par les détails, voici un exemple générique pour expliquer comment
ExitStack
fonctionne:Production:
la source
Avec python 2.6 Cela ne fonctionnera pas, nous devons utiliser ci-dessous pour ouvrir plusieurs fichiers:
la source
Réponse tardive (8 ans), mais pour quelqu'un qui cherche à joindre plusieurs fichiers en un seul , la fonction suivante peut être utile:
la source