datatool
CLI em Python Python ≥ 3.10 GPLv3

O CLI que resolve o CSV problemático antes do seu script quebrar.

Converte, diagnostica, perfila e limpa CSV, Excel, JSON e Parquet: nulos, duplicidade, datas inconsistentes e texto que devia ser número, tudo detectado automaticamente. Também entende CSV com ;/cp1252, CPF/CNPJ e valores em R$, nativamente.

pip install datatool-cli
10/10user stories do MVP
317testes automatizados
21specs públicas
$ datatool info clientes.csv

Arquivo: clientes.csv
Linhas: 10
Colunas: 6
Tamanho: 711 bytes

Problemas encontrados:
  ⚠ 3 valores nulos em "email"
  ⚠ 1 linhas duplicadas
  ⚠ "data_nascimento" contém 4 formatos de data diferentes
  ⚠ 10 CPFs com dígito verificador inválido
  ⚠ "idade" está armazenada como texto mas parece numérica

Sugestões:
  1. Corrigir tipos → datatool clean clientes.csv --fix-types
  2. Remover duplicidades → datatool clean clientes.csv --remove-duplicates
  3. Normalizar datas → datatool clean clientes.csv --normalize-dates
  4. Tratar valores nulos → datatool clean clientes.csv --drop-null
$ 

Detecta o que atrapalha antes de você perceber

info e clean abrem o arquivo e apontam os problemas, coluna por coluna, antes de qualquer análise.

NULOS · DUPLICIDADE

O óbvio, automático. Valores nulos, linhas duplicadas (inteiras ou por chave, como um ID) e inconsistência de capitalização ("Porto Alegre" / "PORTO ALEGRE") saem no primeiro diagnóstico.

TIPOS

Texto que devia ser número. --fix-types reconhece tanto 1,234.56 quanto 1.234,56 e converte para o tipo certo, sem confundir milhar com decimal.

DATAS

Qualquer formato comum. Colunas com dd/mm/yyyy, yyyy-mm-dd e outras variações viram ISO 8601 numa única passada.

CSV REGIONAL · DOCUMENTOS

Suporte nativo ao Brasil. CSV exportado pelo Excel em português (;, cp1252) é detectado sozinho, e CPF/CNPJ são validados pelo dígito verificador.

De planilha bagunçada a dataset limpo

O mesmo arquivo, antes e depois de datatool clean clientes.csv --trim --normalize-case --normalize-documents masked --remove-duplicates --key cpf --output limpo.csv.

nomecidadecpf
"  Ana Souza  "Ana Souza PORTO ALEGREPorto Alegre 52998224725529.982.247-25
"joão pereira "joão pereira porto alegrePorto Alegre 12345678909123.456.789-09
Ana Souza Porto Alegre 52998224725

A terceira linha é uma duplicidade por cpf e some no "depois" — --remove-duplicates mantém só a primeira ocorrência.

$ datatool clean clientes_sujos.csv

Arquivo: clientes_sujos.csv
Linhas: 20
Colunas: 5

nome
  1 registros com espaços extras

email
  1 valores inválidos

telefone
  3 formatos diferentes

cpf
  1 valores duplicados

cidade
  "PORTO ALEGRE"
  "Porto Alegre"
  "porto alegre"

Quatro comandos, um fluxo

Sem flags, clean só diagnostica — nada é gravado até você pedir.

convert

Converte entre CSV, JSON, JSONL, Excel, Parquet, Feather, Avro e SQLite. O formato é inferido pela extensão do arquivo.

datatool convert vendas.xlsx vendas.parquet

info

Abre um arquivo e aponta nulos, duplicidade, datas inconsistentes e texto que devia ser número.

datatool info clientes.csv

profile

Min, max, média, percentis e outliers nas colunas numéricas; cardinalidade e top valores nas categóricas.

datatool profile vendas.csv --key cpf

clean

Corrige o que o info encontrou: espaços, capitalização, duplicidade, nulos, datas, tipos, CPF/CNPJ.

datatool clean clientes.csv --fix-types --output limpo.csv

JSON pronto para script e CI

--format json troca a saída de texto por um documento versionado — o mesmo diagnóstico, em formato que um jq, um notebook ou um pipeline de CI conseguem ler.

--redact-values tira os valores de célula do relatório sem perder as contagens. Serve para colar a saída num chat de IA ou num ticket sem expor dado de cliente — o log de execução também nunca grava valores.

{
  "schema_version": 1,
  "command": "info",
  "status": "ok",
  "file": {
    "path": "clientes.csv",
    "format": "csv",
    "rows": 10,
    "columns": 6,
    "size_bytes": 711
  },
  "problems": [
    {
      "category": "nulls",
      "column": "email",
      "count": 3,
      "count_unit": "values",
      "message": "3 valores nulos em \"email\""
    },
    …
  ],
  "suggestions": [ … ]
}

Um servidor MCP para agentes de IA

Claude Code, Claude Desktop, Cursor e outros agentes que falam MCP podem chamar info, profile, clean e convert direto, em vez de escrever código de análise do zero a cada conversa.

datatool_info datatool_profile datatool_clean_diagnose datatool_clean_apply datatool_convert

Todo caminho de arquivo fica restrito ao diretório passado em --root. redact_values vem ligado por padrão nas ferramentas — diferente do CLI — para valores de célula não trafegarem para o modelo sem pedido explícito.

pip install "datatool-cli[mcp]"
{
  "mcpServers": {
    "datatool": {
      "command": "datatool-mcp",
      "args": ["--root", "/caminho/do/projeto"]
    }
  }
}

Instalação

Publicado no PyPI como datatool-cli; o comando é datatool. Requer Python 3.10 ou mais novo.

$ pip install datatool-cli
$ datatool info clientes.csv
Ver no GitHub