Ad Code

Como abrir e fechar arquivos corretamente em Python


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:

  1. Abrimos o arquivo usando open().

  2. Escrevemos um texto usando write().

  3. 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.

Postar um comentário

0 Comentários

Close Menu