ragfica.pages.dev

Como criar um script Python para detectar e corrigir encoding errado?

Quando arquivos de texto apresentam caracteres corrompidos ou ilegíveis, o problema geralmente está relacionado a um encoding incorreto. Com um script Python bem estruturado, é possível detectar e corrigir automaticamente esses erros, economizando tempo e evitando retrabalho manual.

Pré-requisitos

Passo 1: Detectar o encoding do arquivo

O primeiro passo é identificar o encoding atual do arquivo. A biblioteca chardet é ideal para isso, pois analisa o conteúdo e sugere o encoding mais provável.

import chardet

def detect_encoding(file_path):
    with open(file_path, 'rb') as file:
        raw_data = file.read()
        result = chardet.detect(raw_data)
        return result['encoding']

# Exemplo de uso
file_path = 'arquivo_corrompido.txt'
encoding = detect_encoding(file_path)
print(f'Encoding detectado: {encoding}')

Passo 2: Ler o arquivo com o encoding detectado

Após detectar o encoding, o próximo passo é ler o arquivo usando esse encoding. Se houver erros de leitura, podemos usar a opção errors='replace' para substituir caracteres inválidos.

def read_file(file_path, encoding):
    try:
        with open(file_path, 'r', encoding=encoding, errors='replace') as file:
            content = file.read()
            return content
    except Exception as e:
        print(f'Erro ao ler o arquivo: {e}')
        return None

content = read_file(file_path, encoding)

Passo 3: Corrigir o encoding e salvar o arquivo

Com o conteúdo lido, podemos reescrever o arquivo usando um encoding padrão, como UTF-8, para garantir compatibilidade futura.

def correct_encoding(file_path, content):
    corrected_file = 'arquivo_corrigido.txt'
    with open(corrected_file, 'w', encoding='utf-8') as file:
        file.write(content)
    print(f'Arquivo corrigido salvo como: {corrected_file}')

correct_encoding(file_path, content)

Passo 4: Script completo para detecção e correção

Agora, vamos combinar todos os passos em um único script Python para automatizar o processo.

import chardet

def detect_encoding(file_path):
    with open(file_path, 'rb') as file:
        raw_data = file.read()
        result = chardet.detect(raw_data)
        return result['encoding']

def read_file(file_path, encoding):
    try:
        with open(file_path, 'r', encoding=encoding, errors='replace') as file:
            content = file.read()
            return content
    except Exception as e:
        print(f'Erro ao ler o arquivo: {e}')
        return None

def correct_encoding(file_path, content):
    corrected_file = 'arquivo_corrigido.txt'
    with open(corrected_file, 'w', encoding='utf-8') as file:
        file.write(content)
    print(f'Arquivo corrigido salvo como: {corrected_file}')

def main(file_path):
    encoding = detect_encoding(file_path)
    print(f'Encoding detectado: {encoding}')

    content = read_file(file_path, encoding)
    if content:
        correct_encoding(file_path, content)
    else:
        print('Não foi possível corrigir o arquivo.')

if __name__ == '__main__':
    file_path = 'arquivo_corrompido.txt'
    main(file_path)

Exemplo Prático

Arquivo Original Encoding Detectado Arquivo Corrigido
arquivo_corrompido.txt ISO-8859-1 arquivo_corrigido.txt

Conclusão

Com este script Python, você automatiza a detecção e correção de encoding de arquivos de texto em segundos, eliminando a necessidade de intervenção manual e garantindo que seus dados estejam sempre legíveis e compatíveis.