>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Python

Domare il Caos delle Tabelle Direttamente dal Terminale

Build status Coverage status PyPI downloads Version License Support Python versions

Se ricevi regolarmente esportazioni di dati, probabilmente conosci il problema. Un file di trecento megabyte, codifica Windows-1251, il delimitatore è un punto e virgola in alcuni punti e una virgola in altri, e ci sono interruzioni di riga non precedute da escape all'interno delle righe. Aprirlo in Excel è un modo sicuro per far congelare completamente la suite office o per eliminare accidentalmente gli zeri iniziali dai numeri di telefono. Scrivere un rapido script Python con pandas solo per fare un controllo è anche una seccatura.

In queste situazioni, csvkit viene in soccorso — un insieme di utility da riga di comando per lavorare con dati tabulari. Il progetto è su GitHub dal 2011, ha raccolto oltre 6400 stelle, e rimane ancora uno dei modi più convenienti per sezionare i CSV direttamente in bash.

Cosa può fare questo insieme di utility

I creatori del pacchetto, il giornale Wire Services, sono stati ispirati da strumenti come pdftk e GDAL. L'idea è semplice: dare agli sviluppatori e agli analisti di dati un insieme di comandi specializzati per le pipeline UNIX per pulire, tagliare, formattare ed esplorare file tabulari senza scrivere codice.

Le utility sono suddivise per compito: conversione, taglio, analisi ed esecuzione di query SQL.

Anteprima rapida e statistiche di base

Il comando csvlook trasforma un CSV grezzo in una elegante tabella ASCII con l'allineamento corretto delle colonne. Combinato con head o less, ottieni un'ottima anteprima:

head -n 20 data.csv | csvlook

Se hai bisogno di capire la struttura di un file sconosciuto, esegui csvstat. L'utility analizza i tipi di dati in ogni colonna, trova i valori mancanti, calcola minimo, massimo, media e mostra un elenco dei valori più frequenti:

csvstat data.csv

Taglio e filtraggio

Le utility UNIX tradizionali come cut e grep spesso falliscono sui CSV complessi quando virgole o interruzioni di riga appaiono all'interno di campi tra virgolette. Il pacchetto ha alternative specializzate:

csvcut taglia le colonne necessarie per nome o numero:

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

csvgrep filtra le righe per valori o espressioni regolari:

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

SQL direttamente sui file

Uno dei comandi più convenienti è csvsql. Può fare due cose. Prima, genera uno schema DDL per PostgreSQL, MySQL o SQLite analizzando i tipi di dati nel file. Seconda, ti permette di scrivere query SQL direttamente contro i file CSV su disco tramite SQLite integrato:

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

Puoi anche unire due file diversi come se fossero tabelle di database normali:

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

Conversione di formati

Lo strumento in2csv converte praticamente qualsiasi cosa in CSV: file Excel (.xls e .xlsx), JSON, NDJSON e larghezza fissa. Non c'è bisogno di lanciare Excel solo per salvare nuovamente un report ricevuto:

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

Come funziona sotto il cofano

Il pacchetto è scritto in Python e distribuito tramite PyPI. Usa SQLAlchemy per le operazioni di database, il che spiega la flessibilità di csvsql quando si lavora con diversi dialetti SQL.

Il vantaggio principale dell'architettura è la compatibilità con l'input e l'output standard (stdin/stdout). I comandi sono facilmente concatenati attraverso una pipe normale:

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

Questo approccio ha però uno svantaggio. Poiché la libreria è scritta in Python puro con controllo dei tipi a runtime, le prestazioni calano sui file di più gigabyte. Per esportazioni su scala di terabyte, è meglio usare xsv in Rust o duckdb, ma per attività quotidiane fino a qualche centinaio di megabyte, la velocità di csvkit è più che sufficiente.

Dove torna utile nella pratica

  1. Controllare la struttura dei dati su un server remoto senza GUI.
  2. Pre-pulire i file in script bash prima di caricarli in una pipeline ETL.
  3. Generare schemi di tabelle di database per una nuova esportazione (csvsql -i postgresql data.csv).
  4. Unire rapidamente due file disparati per una chiave comune tramite csvjoin.

Vale la pena installarlo

Il pacchetto si installa con un singolo comando pip:

pip install csvkit

Se analizzi spesso log, lavori con importazioni di database o ricevi report come archivi con Excel e CSV, questo insieme di utility ti farà risparmiare molti nervi. Elimina la necessità di aprire un editor pesante o scrivere script monouso per il filtraggio base di due colonne. Inizia con csvlook e in2csv — ripagano l'installazione nei primi cinque minuti di utilizzo.

Progetti correlati