Quero alterar alguns arquivos de uma só vez, se puder escrever em todos eles. Gostaria de saber se de alguma forma posso combinar as várias chamadas abertas com a with
declaração:
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
Se isso não for possível, como seria uma solução elegante para esse problema?
with
para abrir uma lista variável de arquivos?ExitStack
partir do Python 3.3. Não há maneira fácil de fazer isso em nenhuma versão anterior do Python.Basta substituir
and
por,
e pronto:fonte
Para abrir muitos arquivos de uma vez ou para caminhos longos, pode ser útil dividir as coisas em várias linhas. Do Python Style Guide, conforme sugerido por @Sven Marnach nos comentários para outra resposta:
fonte
Aninhado com declarações fará o mesmo trabalho e, na minha opinião, é mais simples de lidar.
Digamos que você tenha inFile.txt e queira gravá-lo em dois outFile's simultaneamente.
EDITAR:
Eu não entendo o motivo do voto negativo. Testei meu código antes de publicar minha resposta e funciona como desejado: ele grava em todos os outFile, exatamente como a pergunta. Nenhuma gravação duplicada ou falha na gravação. Por isso, estou realmente curioso para saber por que minha resposta é considerada errada, subótima ou algo assim.
fonte
Desde o Python 3.3, você pode usar a classe
ExitStack
docontextlib
módulo paraabrir com segurança um número arbitrário de arquivos .
Ele pode gerenciar um número dinâmico de objetos sensíveis ao contexto, o que significa que será especialmente útil se você não souber quantos arquivos manipulará .
De fato, o caso de uso canônico mencionado na documentação está gerenciando um número dinâmico de arquivos.
Se você estiver interessado nos detalhes, aqui está um exemplo genérico para explicar como
ExitStack
funciona:Resultado:
fonte
Com o python 2.6 Não funcionará, temos que usar abaixo o caminho para abrir vários arquivos:
fonte
Resposta tardia (8 anos), mas para alguém que deseja juntar vários arquivos em um , a seguinte função pode ser útil:
fonte