>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Python

Tabellenchaos temmen vanaf de terminal

Build status Coverage status PyPI downloads Version License Support Python versions

Als je regelmatig data-exports ontvangt, ken je vast de frustratie. Een bestand van driehonderd megabyte, Windows-1251-codering, scheidingsteken is ergens een puntkomma en ergens een komma, en er zijn niet-ge-escapete regelovergangen binnen rijen. Dit in Excel openen is een gegarandeerde manier om je kantoorsoftware volledig te bevriezen of per ongeluk voorloopnullen van telefoonnummers te verwijderen. Een snel Python-script met pandas schrijven voor een simpele controle is ook een gedoe.

In zulke situaties komt csvkit te hulp — een set command-line utilities voor het werken met tabelgegevens. Het project staat sinds 2011 op GitHub, heeft meer dan 64.000 sterren verzameld en blijft een van de meest handige manieren om CSVs direct in bash te ontleden.

Wat deze set utilities kan doen

De makers van het pakket, journalistiek platform Wire Services, lieten zich inspireren door tools zoals pdftk en GDAL. Het idee is simpel: geef ontwikkelaars en data-analisten een set gespecialiseerde commando's voor UNIX-pipelines om tabelbestanden te reinigen, te snijden, te formatteren en te verkennen zonder code te schrijven.

De utilities zijn opgedeeld per taak: conversie, snijden, analyse en SQL-query-uitvoering.

Snelle preview en basisstatistieken

Het csvlook commando zet ruwe CSV om in een nette ASCII-tabel met correcte kolomuitlijning. Gecombineerd met head of less krijg je een uitstekende preview:

head -n 20 data.csv | csvlook

Als je de structuur van een onbekend bestand wilt begrijpen, voer dan csvstat uit. De utility analyseert datatypes in elke kolom, vindt ontbrekende waarden, berekent minimum, maximum, gemiddelde en toont een lijst van de meest voorkomende waarden:

csvstat data.csv

Snijden en filteren

Traditionele UNIX-utilities zoals cut en grep werken vaak niet goed bij complexe CSVs wanneer komma's of regelovergangen binnen gequote velden voorkomen. Het pakket heeft gespecialiseerde alternatieven:

Met csvcut kun je de benodigde kolommen op naam of nummer uitsnijden:

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

Met csvgrep filter je rijen op waarden of reguliere expressies:

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

SQL direct bovenop bestanden

Een van de meest handige commando's is csvsql. Het kan twee dingen doen. Ten eerste genereert het een DDL-schema voor PostgreSQL, MySQL of SQLite op basis van analyse van datatypes in het bestand. Ten tweede kun je SQL-queries direct uitvoeren op CSV-bestanden op schijf via ingebouwde SQLite:

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

Je kunt ook twee verschillende bestanden samenvoegen alsof het reguliere databasetabellen zijn:

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

Formaatconversie

Het in2csv hulpmiddel converteert zo ongeveer alles naar CSV: Excel-bestanden (.xls en .xlsx), JSON, NDJSON en bestanden met vaste breedte. Geen noodzaak om Excel te openen om een ontvangen rapport opnieuw op te slaan:

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

Hoe het onder de motorkap werkt

Het pakket is geschreven in Python en gedistribueerd via PyPI. Het gebruikt SQLAlchemy voor databasebewerkingen, wat de flexibiliteit van csvsql verklaart bij het werken met verschillende SQL-dialecten.

Het belangrijkste voordeel van de architectuur is compatibiliteit met standaard invoer en uitvoer (stdin/stdout). Commando's kunnen eenvoudig worden gekoppeld via een gewone pipe:

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

Deze aanpak heeft echter een nadeel. Omdat de library in pure Python is geschreven met runtime type-checking, daalt de prestaties bij bestanden van meerdere gigabytes. Voor exports op terabyte-schaal kun je beter xsv in Rust of duckdb gebruiken, maar voor alledaagse taken tot een paar honderd megabytes is csvkit's snelheid meer dan voldoende.

Waar het in de praktijk van pas komt

  1. Controleren van datastructuur op een remote server zonder GUI.
  2. Bestanden vooraf reinigen in bash-scripts voordat ze in een ETL-pipeline worden geladen.
  3. Databasetabel-schema's genereren voor een nieuwe export (csvsql -i postgresql data.csv).
  4. Snel twee verschillende bestanden samenvoegen op een gemeenschappelijke sleutel via csvjoin.

Is het de moeite waard om te installeren

Het pakket installeer je met een enkel pip-commando:

pip install csvkit

Als je vaak logs parseert, werkt met database-imports of rapporten ontvangt als archieven met Excel en CSV, zal deze set utilities je veel zenuwen besparen. Het elimineert de noodzaak om een zware editor te openen of eenmalige scripts te schrijven voor basisfiltering van twee kolommen. Begin met csvlook en in2csv — die verdienen de installatie in de eerste vijf minuten gebruik.

Gerelateerde projecten