612 votes

Plusieurs variables en Python "avec la" déclaration de

Est-il possible de déclarer plusieurs variables à l'aide d'un with déclaration en Python?

Quelque chose comme:

from __future__ import with_statement

with open("out.txt","wt"), open("in.txt") as file_out, file_in:
    for line in file_in:
        file_out.write(line)

... ou est le nettoyage de deux ressources en même temps le problème?

968voto

Rafał Dowgird Points 16600

Il est aujourd'hui possible, en Python 3.1. Le nouveau with de la syntaxe prend en charge plusieurs gestionnaires de contexte:

with A() as a, B() as b, C() as c:
    doSomething(a,b,c)

Contrairement à l' contextlib.nested, ce qui garantit qu' a et b ont leur __exit__()s', même si C() ou __enter__() méthode lève une exception.

Mise à jour: aujourd'hui à un Python 2.7 interprète près de chez vous!

65voto

Alex Martelli Points 330805

contextlib.nested prend en charge ce:

import contextlib

with contextlib.nested(open("out.txt","wt"), open("in.txt")) as (file_out, file_in):

   ...

Mise à jour:
Pour citer la documentation, concernant l' contextlib.nested:

Obsolète depuis la version 2.7: Le avec-déclaration prend désormais en charge cette la fonctionnalité directement (sans passer par la confusion des erreurs bizarreries).

Voir Rafał Dowgird réponse pour plus d'informations.

20voto

Andrew Hare Points 159332

Je pense que vous voulez faire à la place:

from __future__ import with_statement

with open("out.txt","wt") as file_out:
    with open("in.txt") as file_in:
        for line in file_in:
            file_out.write(line)

-3voto

nosklo Points 75862
open('out.txt', 'w').writelines(open('in.txt'))

Les deux fichiers seront implicity, immédiatement fermé juste après l'exécution de cette ligne, Disponible.

-4voto

SilentGhost Points 79627

pourquoi ne pas tout simplement:

with open(out_file, 'w') as file:
    file.writelines(open(in_file))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X