Maison > Article > développement back-end > Puis-je utiliser « avec open » pour ouvrir plusieurs fichiers simultanément en Python ?
En Python, l'instruction with open fournit un moyen élégant de gérer les opérations sur les fichiers dans un contexte structuré. Cela élimine le besoin d'ouvrir et de fermer explicitement les fichiers, garantissant ainsi que les ressources sont correctement libérées à la fin du blocage.
Cependant, que se passe-t-il si vous devez modifier ou accéder à plusieurs fichiers simultanément ? La question suivante explore ce scénario :
Je souhaite modifier plusieurs fichiers simultanément, mais seulement si je peux réussir à écrire dans chacun d'eux. Puis-je combiner plusieurs appels ouverts dans l'instruction with ?
Dans les versions Python 2.7 et 3.1 et versions ultérieures, la réponse est un oui catégorique.
with open('a', 'w') as a, open('b', 'w') as b: do_something()
Cette syntaxe concise vous permet d'ouvrir plusieurs fichiers au sein du même gestionnaire de contexte, vous permettant d'effectuer des opérations sur chacun d'eux simultanément.
Pour les situations où vous devez ouvrir un nombre dynamique de fichiers, Python 3.3 introduit une solution encore plus polyvalente, contextlib.ExitStack.
with ExitStack() as stack: files = [stack.enter_context(open(fname)) for fname in filenames] # Do something with "files"
Cette approche offre une plus grande flexibilité, vous permettant d'ouvrir et de gérer dynamiquement une collection de fichiers dans un seul bloc de contexte.
Alternativement, si votre besoin est de traiter les fichiers de manière séquentielle, un plus Une approche simple consiste à parcourir les fichiers et à les ouvrir dans chaque itération de boucle :
for fname in filenames: with open(fname) as f: # Process f
Cette approche séquentielle présente l'avantage de la simplicité et peut être plus adaptée lors du traitement d'un grand nombre de fichiers.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!