Gerenciando vários objetos com um with

Aviso: Python 2.7+

Hoje descobri que é possível gerenciar vários objetos em um context manager sem a necessidade de aninhar várias cláusulas with. Ou seja, pude transformar o código¹ que eu estava escrevendo de:

def ajeita_csv(path):
    with open(path, 'r') as fr:
        with open('u' + path, 'w') as fw:
            reader, writer = csv.reader(fr), csv.writer(fw)
            for row in reader:
                for i in range(3, len(row), 5):
                    new_row = row[:3] + row[i:i+5]
                    writer.writerow(new_row)

para:

def ajeita_csv(path):
    with open(path, 'r') as fr, open('u' + path, 'w') as fw:
        reader, writer = csv.reader(fr), csv.writer(fw)
        for row in reader:
            for i in range(3, len(row), 5):
                new_row = row[:3] + row[i:i+5]
                writer.writerow(new_row)

Ou seja, é possível gerenciar a abertura/fechamento de vários objetos/recursos em uma única cláusula with, separando os objetos por uma vírgula.

Fica a dica.

¹Código para dar uma ajustada em um CSV desformatado, que tinha vários registros por linha.

2 comentários sobre “Gerenciando vários objetos com um with

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s