>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Python

Domando o Caos das Tabelas Direto do Terminal

Build status Coverage status PyPI downloads Version License Support Python versions

Se você recebe regularmente exportações de dados, provavelmente conhece a dor. Um arquivo de trezentos megabytes, codificação Windows-1251, o delimitador é um ponto e vírgula em alguns lugares e uma vírgula em outros, e há quebras de linha não escapadas dentro das linhas. Abrir isso no Excel é uma maneira garantida de congelar completamente seu pacote office ou acidentalmente remover zeros à esquerda de números de telefone. Escrever um script Python rápido com pandas apenas para fazer uma verificação também é um incômodo.

Nessas situações, o csvkit vem ao resgate — um conjunto de utilitários de linha de comando para trabalhar com dados tabulares. O projeto está no GitHub desde 2011, reuniu mais de 6400 estrelas, e ainda permanece como uma das formas mais convenientes de dissecar CSVs diretamente no bash.

O que esse conjunto de utilitários pode fazer

Os criadores do pacote, o veículo jornalístico Wire Services, foram inspirados por ferramentas como pdftk e GDAL. A ideia é simples: fornecer aos desenvolvedores e analistas de dados um conjunto de comandos especializados para pipelines UNIX para limpar, fatiar, formatar e explorar arquivos tabulares sem escrever código.

Os utilitários são divididos por tarefa: conversão, fatiamento, análise e execução de consultas SQL.

Pré-visualização rápida e estatísticas básicas

O comando csvlook transforma CSV bruto em uma tabela ASCII organizada com alinhamento adequado das colunas. Combinado com head ou less, você obtém uma excelente pré-visualização:

head -n 20 data.csv | csvlook

Se você precisa entender a estrutura de um arquivo desconhecido, execute csvstat. O utilitário analisa os tipos de dados em cada coluna, encontra valores ausentes, calcula mínimo, máximo, média e mostra uma lista dos valores mais frequentes:

csvstat data.csv

Fatiamento e filtragem

Utilitários UNIX tradicionais como cut e grep frequentemente falham em CSVs complexos quando vírgulas ou quebras de linha aparecem dentro de campos entre aspas. O pacote tem alternativas especializadas:

csvcut corta as colunas necessárias pelo nome ou número:

csvcut -c "user_id,email,status" users.csv > clean_users.csv

csvgrep filtra linhas por valores ou expressões regulares:

csvgrep -c "status" -m "active" users.csv

SQL diretamente sobre os arquivos

Um dos comandos mais convenientes é csvsql. Ele pode fazer duas coisas. Primeiro, ele gera um schema DDL para PostgreSQL, MySQL ou SQLite com base na análise dos tipos de dados no arquivo. Segundo, ele permite escrever consultas SQL diretamente contra arquivos CSV em disco via SQLite integrado:

csvsql --query "select status, count(*) from users group by status" users.csv

Você também pode unir dois arquivos diferentes como se fossem tabelas regulares de banco de dados:

csvsql --query "select u.name, o.total from users u join orders o on u.id = o.user_id" users.csv orders.csv

Conversão de formatos

A ferramenta in2csv converte praticamente qualquer coisa para CSV: arquivos Excel (.xls e .xlsx), JSON, NDJSON e largura fixa. Não há necessidade de abrir o Excel apenas para salvar novamente um relatório recebido:

in2csv report.xlsx --sheet "Sales" > sales.csv

Como funciona nos bastidores

O pacote é escrito em Python e distribuído via PyPI. Ele usa SQLAlchemy para operações de banco de dados, o que explica a flexibilidade do csvsql ao trabalhar com diferentes dialetos SQL.

A principal vantagem da arquitetura é a compatibilidade com entrada e saída padrão (stdin/stdout). Os comandos são facilmente encadeados através de um pipe comum:

in2csv data.xlsx | csvgrep -c "country" -m "RU" | csvcut -c 1,3,5 | csvlook

Essa abordagem tem um porém, porém. Como a biblioteca é escrita em Python puro com verificação de tipos em tempo de execução, o desempenho cai em arquivos de vários gigabytes. Para exportações na escala de terabytes, é melhor usar xsv em Rust ou duckdb, mas para tarefas do dia a dia de até algumas centenas de megabytes, a velocidade do csvkit é mais do que suficiente.

Onde é útil na prática

  1. Verificar a estrutura de dados em um servidor remoto sem GUI.
  2. Pré-limpar arquivos em scripts bash antes de carregar em um pipeline ETL.
  3. Gerar schemas de tabelas de banco de dados para uma nova exportação (csvsql -i postgresql data.csv).
  4. Mesclar rapidamente dois arquivos diferentes por uma chave comum via csvjoin.

Vale a pena instalar

O pacote é instalado com um único comando pip:

pip install csvkit

Se você frequentemente faz parsing de logs, trabalha com imports de banco de dados ou recebe relatórios como arquivos com Excel e CSV, esse conjunto de utilitários vai economizar muita energia. Ele elimina a necessidade de abrir um editor pesado ou escrever scripts pontuais para filtragem básica de duas colunas. Comece com csvlook e in2csv — eles pagam a instalação nos primeiros cinco minutos de uso.

Projetos relacionados