Como Ler Arquivos Grandes Linha por Linha no Python sem Estourar a Memória RAM
Como Ler Arquivos Grandes Linha por Linha no Python sem Estourar a Memória RAM
Carregar arquivos de texto massivos (como logs de servidores ou relatórios de dados) inteiramente na memória RAM usando métodos como
.readlines() ou .read() pode causar travamentos na aplicação e erro de estouro de memória (MemoryError). A abordagem ideal no Python é iterar diretamente sobre o objeto do arquivo dentro de um bloco with open(), utilizando o conceito de streaming, onde apenas uma linha por vez é mantida em memória durante o processamento.Python
def processar_arquivo_gigante(caminho_arquivo):
# O bloco 'with' garante o fechamento correto do arquivo após o uso
with open(caminho_arquivo, mode='r', encoding='utf-8') as arquivo:
# A iteração direta no objeto 'arquivo' cria um gerador linha a linha
for linha_num, linha in enumerate(arquivo, start=1):
# .strip() remove espaços em branco e a quebra de linha (\n) do final
conteudo_limpo = linha.strip()
# Exemplo de processamento simples por linha
if "ERROR" in conteudo_limpo:
print(f"[Linha {linha_num}] Erro encontrado: {conteudo_limpo}")
# Exemplo de uso prático
if __name__ == "__main__":
# Substitua pelo caminho do seu arquivo de texto ou log grande
processar_arquivo_gigante("servidor_app.log")
- Leitura via Gerador (Lazy Evaluation): O objeto retornado por
open()atua como um iterador. Ele lê do disco para a RAM apenas o trecho do arquivo necessário para a linha atual, mantendo o consumo de memória baixo e constante, independentemente do tamanho do arquivo (seja ele de 10 MB ou 50 GB). - Evite
.readlines()ou.read(): O método.readlines()converte todas as linhas do arquivo em uma lista na RAM de uma só vez. Já o.read()carrega todo o conteúdo em uma única string gigante. Ambos devem ser evitados para arquivos de grande porte. - Parâmetro
encoding='utf-8': Sempre especifique o encoding do arquivo explicitamente para evitar erros de decodificação (UnicodeDecodeError), garantindo a correta interpretação de acentos e caracteres especiais entre diferentes sistemas operacionais. - Eficácia do Bloco
with: Garante que o descritor do arquivo no sistema operacional seja encerrado automaticamente ao final da execução ou mesmo se uma exceção for disparada dentro do loop.

Comentários
Postar um comentário