Módulo 15 - Arquivos de texto

Fechamento automático com with: o jeito certo de abrir arquivos

9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Reconhecer os riscos de esquecer o close ou de um erro pular o close.
  • Escrever leituras e escritas de arquivo usando o bloco with.
  • Entender que o with fecha o arquivo sempre, mesmo quando ocorre erro.
  • Adotar o with como padrão em todo código com arquivos daqui em diante.

O problema de esquecer o close

Nas aulas anteriores, o close apareceu como parte obrigatória do ritual, e você deve ter percebido a fragilidade: é uma linha fácil de esquecer. As consequências vão de invisíveis a irritantes. Conteúdo escrito com write pode ficar numa área de espera e nunca chegar ao disco. No Windows, um arquivo aberto pelo seu script pode ficar travado, recusando ser apagado ou editado por outro programa até o Python liberar. São defeitos silenciosos, dos que aparecem longe da causa.

E existe um cenário mais traiçoeiro, que nem a disciplina resolve: o erro no meio do caminho. Imagine um script que abre o arquivo, processa as linhas e fecha no final. Se uma das linhas do meio provoca um erro, o Python interrompe a execução ali, e o close da última linha nunca roda. Você escreveu o close, fez tudo certo, e o arquivo ficou aberto do mesmo jeito. Depois do módulo 14, você sabe que erro em tempo de execução é fato da vida. O fechamento precisa de uma garantia mais forte que a sua memória.

Conhecendo o with

A garantia tem nome: with. A estrutura junta a abertura e o fechamento numa só construção. Você escreve with open(nome, modo) as arquivo, dois pontos, e usa o arquivo dentro do bloco indentado, como faz com if e for. Quando o bloco termina, o Python fecha o arquivo sozinho. E o detalhe que muda tudo: fecha mesmo que um erro exploda no meio do bloco. O fechamento deixa de depender de você lembrar e vira responsabilidade da linguagem.

with open("recado.txt", "w") as arquivo:
    arquivo.write("Escrito com with, fechado sem eu pedir.\n")

# Aqui fora do bloco, o arquivo já está fechado. Sem close.

O as batiza a variável do arquivo, e o fim do bloco indentado fecha tudo. Nenhum close à vista.

Leia a linha de abertura em voz alta e ela quase se explica: com o arquivo recado.txt aberto para escrita, chamado de arquivo, faça o seguinte. A indentação delimita o período em que o arquivo está aberto. Terminou o bloco, terminou o acesso. Essa clareza visual é um bônus: qualquer pessoa que ler o seu código enxerga onde o arquivo começa e termina de ser usado, sem caçar um close perdido.

Reescrevendo tudo no padrão with

Hora de atualizar o repertório. Os exemplos das aulas 2 e 3 continuam corretos, mas a versão com with é mais curta e mais segura. Compare a leitura com tratamento de erro, primeiro do jeito antigo, depois do jeito que o curso adota daqui para a frente.

Antes: open e close manuais

  • arquivo = open("compras.txt", "r")
  • for linha in arquivo: print(linha.strip())
  • arquivo.close() no final, se nada der errado antes
  • Um erro no meio pula o close e deixa o arquivo aberto

Agora: with fecha sozinho

  • with open("compras.txt", "r") as arquivo:
  • for linha in arquivo: print(linha.strip())
  • Sem close: o fim do bloco fecha o arquivo
  • Mesmo com erro no meio, o fechamento acontece
# Escrever, acrescentar e ler, tudo no padrão with:

with open("compras.txt", "w") as arquivo:
    arquivo.write("Arroz\n")
    arquivo.write("Feijão\n")

with open("compras.txt", "a") as arquivo:
    arquivo.write("Café\n")

try:
    with open("compras.txt", "r") as arquivo:
        for linha in arquivo:
            print(linha.strip())
except FileNotFoundError:
    print("A lista ainda não foi criada.")

Os três modos no padrão definitivo. O try/except abraça o with quando o arquivo pode não existir.

Fica combinado, então: a partir de agora, todo acesso a arquivo neste curso usa with, e essa também é a recomendação da documentação oficial do Python. Se você encontrar código com open e close soltos pela internet, vai entender o que ele faz, e vai saber que existe um jeito melhor. A prática da próxima aula sobre cuidados e a lista de tarefas da aula 6 já nascem nesse padrão.

Teste rápido

Qual é a principal vantagem do with sobre chamar close manualmente?

Perguntas frequentes

O código com open e close das aulas anteriores está errado?
Errado não; frágil. Ele funciona quando tudo corre bem, e foi útil para você enxergar cada passo do ritual. O with faz o mesmo trabalho com garantia de fechamento e menos linhas. Aprender o jeito manual primeiro foi proposital: agora você sabe exatamente o que o with automatiza.
Posso usar o for e o write normalmente dentro do with?
Pode. Dentro do bloco, a variável criada pelo as é o mesmo objeto arquivo das aulas anteriores: aceita read, write, o for linha a linha, tudo igual. A única diferença é que o fechamento deixa de ser tarefa sua.
E se eu tentar usar o arquivo depois que o bloco with terminar?
O Python levanta um ValueError avisando que a operação foi tentada num arquivo fechado. É o comportamento esperado: fora do bloco, o arquivo não existe mais para o seu código. Precisou de novo acesso, abra outro with.
O try/except entra por dentro ou por fora do with?
Para tratar FileNotFoundError, por fora: o erro acontece na própria abertura, na linha do with. O padrão que o curso usa é try, depois o with dentro dele, e o except FileNotFoundError no final. Foi assim no exemplo desta aula e será assim na prática do módulo.
O with serve para outras coisas além de arquivos?
Serve. O with gerencia qualquer recurso que precise ser aberto e depois liberado, como conexões de rede e bancos de dados, assuntos de etapas futuras da trilha. Arquivo é o primeiro exemplo e o mais comum na vida de quem programa.
Dá para abrir dois arquivos no mesmo with?
Dá: separe as aberturas por vírgula, como em with open("a.txt") as origem, open("b.txt", "w") as destino. É útil para copiar conteúdo de um arquivo para outro. Neste curso básico, um arquivo por vez resolve tudo o que precisamos.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.