Automatizando conversão de arquivos para UTF-8 com Python

 Um script simples, mas eficiente em Python.

O que ele faz:

  • Percorre múltiplos arquivos automaticamente
  • Tenta ler em UTF-8 (com fallback para latin1)
  • Salva cada arquivo convertido na mesma pasta
  • Exibe progresso em tempo real (% concluído) 

  Ideal para quem trabalha com importação no MySQL, dados da Receita ou arquivos legados.

import os

arquivos = [
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos0\K3241.K03200Y0.D51108.ESTABELE",
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos1\K3241.K03200Y1.D60214.ESTABELE",
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos2\K3241.K03200Y2.D60214.ESTABELE",
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos3\K3241.K03200Y3.D60214.ESTABELE",
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos4\K3241.K03200Y4.D60214.ESTABELE",
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos5\K3241.K03200Y5.D60214.ESTABELE",
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos6\K3241.K03200Y6.D60214.ESTABELE",
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos7\K3241.K03200Y7.D60214.ESTABELE",
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos8\K3241.K03200Y8.D60214.ESTABELE",
r"C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\estabelecimentos\Estabelecimentos9\K3241.K03200Y9.D60214.ESTABELE",
]

total = len(arquivos)

for i, arquivo_origem in enumerate(arquivos, start=1):
try:
print(f"\nProcessando: {arquivo_origem}")

pasta = os.path.dirname(arquivo_origem)
nome = os.path.basename(arquivo_origem)
destino = os.path.join(pasta, nome + ".utf8.csv")

# Descobrir encoding
try:
open(arquivo_origem, "r", encoding="utf-8").read(1000)
encoding = "utf-8"
except:
encoding = "latin1"

print(f"Encoding detectado: {encoding}")

# Converter em streaming
with open(arquivo_origem, "r", encoding=encoding, errors="ignore") as origem, \
open(destino, "w", encoding="utf-8") as saida:

for j, linha in enumerate(origem, start=1):
saida.write(linha)

if j % 500000 == 0:
print(f" {j} linhas processadas...")

progresso = (i / total) * 100
print(f"[{progresso:.1f}%] Concluído: {destino}")

except Exception as e:
print(f"Erro: {e}")

print("\nFINALIZADO")

Comentários