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.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Fechamento automático com with: o jeito certo de abrir arquivos.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
O problema de esquecer o close. Esquecer o close pode deixar conteúdo sem gravar no disco e o arquivo preso pelo sistema.
Conhecendo o with. Fechar a porta manualmente funciona, até o dia em que você sai com pressa e esquece.
Reescrevendo tudo no padrão with. Hora de atualizar o repertório.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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.