Como abrir e fechar arquivos corretamente em Python
Ao trabalhar com arquivos em Python, é bastante comum abrir um arquivo, realizar algumas operações e, no final, chamar explicitamente o método close() para fechá-lo.
Essa abordagem funciona, mas pode causar problemas caso uma exceção aconteça antes que o método close() seja executado.
Por esse motivo, o Python oferece uma maneira mais segura e prática de trabalhar com arquivos: a instrução with.
Abrindo e fechando um arquivo manualmente
Uma das formas mais simples de trabalhar com arquivos em Python é utilizar a função open() e, depois de terminar o trabalho, chamar o método close().
Por exemplo:
f = open("nome_do_arquivo.txt", "w")
f.write("Olá, eu sou o João!")
f.close()
Nesse exemplo, nós:
Abrimos o arquivo usando
open().Escrevemos um texto usando
write().Fechamos o arquivo usando
close().
O problema é que o método close() só será executado se o programa chegar até essa linha.
Mas o que acontece se uma exceção ocorrer antes de close()?
O problema de usar close() manualmente
Considere o seguinte exemplo:
f = open("nome_do_arquivo.txt", "w")
f.write("Olá, eu sou o João!")
# Algo inesperado acontece aqui
f.close()
Se uma exceção ocorrer antes da execução do método close(), o Python pode interromper a execução do restante do código.
Como consequência, o arquivo pode permanecer aberto.
Deixar arquivos abertos pode consumir recursos desnecessariamente e também causar problemas quando trabalhamos com muitos arquivos ou em aplicações maiores.
Então, como podemos garantir que o arquivo seja fechado mesmo quando ocorre uma exceção?
Usando try e finally
Uma solução é utilizar um bloco try/finally.
O código que trabalha com o arquivo fica dentro do try, enquanto o método close() é colocado dentro do finally.
Por exemplo:
f = open("nome_do_arquivo.txt", "w")
try:
f.write("Olá, eu sou o João!")
finally:
f.close()
A parte importante desse exemplo é o bloco finally.
O código dentro de finally será executado independentemente de uma exceção ocorrer ou não no bloco try.
Isso significa que o arquivo será fechado mesmo que aconteça algum problema durante a operação.
Essa abordagem é mais segura do que simplesmente chamar close() no final do código.
No entanto, o Python oferece uma solução ainda mais simples.
Usando a instrução with
O Python possui a instrução with, que é a maneira recomendada de trabalhar com arquivos na maioria das situações.
Em vez de chamar manualmente close(), podemos escrever:
with open("nome_do_arquivo.txt", "w") as f:
f.write("Olá, eu sou o João!")
Quando o código dentro do bloco with termina sua execução, o Python fecha automaticamente o arquivo.
Isso também acontece caso uma exceção seja lançada enquanto estamos trabalhando com o arquivo.
Ou seja, não precisamos nos preocupar em lembrar de chamar:
f.close()
O Python cuida disso automaticamente.
Por que usar with?
Usar with torna o código:
Mais seguro;
Mais limpo;
Mais fácil de ler;
Mais fácil de manter;
Menos propenso a deixar arquivos abertos.
Veja a diferença entre as duas abordagens.
Sem with
f = open("nome_do_arquivo.txt", "w")
try:
f.write("Olá, eu sou o João!")
finally:
f.close()
Com with
with open("nome_do_arquivo.txt", "w") as f:
f.write("Olá, eu sou o João!")
A segunda versão é muito mais curta e fácil de entender.
Lendo um arquivo usando with
A instrução with não serve apenas para escrever em arquivos. Também podemos utilizá-la para ler arquivos.
Por exemplo:
with open("nome_do_arquivo.txt", "r") as f:
conteudo = f.read()
print(conteudo)
Quando o bloco with termina, o arquivo é automaticamente fechado.
Também podemos percorrer o arquivo linha por linha:
with open("nome_do_arquivo.txt", "r") as f:
for linha in f:
print(linha)
Essa abordagem pode ser especialmente útil quando trabalhamos com arquivos grandes, pois podemos processar uma linha de cada vez.
O que acontece quando ocorre uma exceção?
Uma das principais vantagens de utilizar with é que o arquivo será fechado corretamente mesmo que uma exceção aconteça.
Por exemplo:
try:
with open("nome_do_arquivo.txt", "w") as f:
f.write("Olá, eu sou o João!")
# Um erro pode ocorrer aqui
except Exception as erro:
print(f"Ocorreu um erro: {erro}")
Mesmo que ocorra um erro dentro do bloco with, o Python garante o encerramento correto do arquivo.
Por isso, utilizar with é considerado uma boa prática quando trabalhamos com arquivos em Python.
Uma regra simples para lembrar
Sempre que você precisar abrir um arquivo em Python, pergunte a si mesmo:
Posso usar
with open(...)aqui?
Na maioria dos casos, a resposta será sim.
Em vez de escrever:
f = open("arquivo.txt", "r")
# Trabalhando com o arquivo
f.close()
Prefira:
with open("arquivo.txt", "r") as f:
# Trabalhando com o arquivo
O Python cuidará automaticamente do fechamento do arquivo quando o bloco with terminar.
Conclusão
Chamar close() manualmente pode funcionar, mas é fácil esquecer essa etapa. Além disso, se uma exceção ocorrer antes da chamada de close(), o arquivo pode permanecer aberto.
Utilizar try e finally é uma maneira de garantir que o arquivo seja fechado:
f = open("arquivo.txt", "w")
try:
f.write("Olá, eu sou o João!")
finally:
f.close()
Porém, quando trabalhamos com arquivos, a instrução with geralmente é a abordagem mais simples, segura e idiomática em Python:
with open("arquivo.txt", "w") as f:
f.write("Olá, eu sou o João!")
Em resumo:
open() + close() → funciona, mas exige gerenciamento manual
try + finally → garante o fechamento mesmo com exceções
with open(...) → recomendado e gerencia o fechamento automaticamente
Se você está aprendendo Python, aprender a utilizar corretamente a instrução with é um passo importante para escrever códigos mais limpos, seguros e confiáveis.
0 Comentários