Tabellen-Chaos direkt vom Terminal aus bändigen
Wenn Sie regelmäßig Datenexporte erhalten, kennen Sie wahrscheinlich das Problem. Eine dreihundert Megabyte große Datei, Windows-1251-Kodierung, Trennzeichen ist manchmal ein Semikolon und manchmal ein Komma, und es gibt unescapte Zeilenumbrüche innerhalb von Zeilen. Diese Datei in Excel zu öffnen, ist ein sicherer Weg, um Ihre Office-Suite komplett einzufrieren oder versehentlich führende Nullen von Telefonnummern zu entfernen. Auch ein schnelles Python-Skript mit pandas nur für eine Plausibilitätsprüfung zu schreiben, ist umständlich.
In solchen Situationen kommt csvkit zur Hilfe – eine Sammlung von Kommandozeilen-Tools für die Arbeit mit tabellarischen Daten. Das Projekt ist seit 2011 auf GitHub, hat über 6400 Sterne gesammelt und ist nach wie vor eine der bequemsten Möglichkeiten, CSVs direkt in bash zu sezieren.
Was dieses Toolset leisten kann
Die Ersteller des Pakets, das Medienunternehmen Wire Services, ließen sich von Tools wie pdftk und GDAL inspirieren. Die Idee ist einfach: Entwicklern und Datenanalysten eine Sammlung spezialisierter Befehle für UNIX-Pipelines zur Verfügung stellen, um tabellarische Dateien zu bereinigen, zu schneiden, zu formatieren und zu untersuchen, ohne Code schreiben zu müssen.
Die Tools sind nach Aufgaben gegliedert: Konvertierung, Slicing, Analyse und SQL-Abfrageausführung.
Schnelle Vorschau und grundlegende Statistiken
Der Befehl csvlook wandelt rohes CSV in eine übersichtliche ASCII-Tabelle mit korrekter Spaltenausrichtung um. In Kombination mit head oder less erhalten Sie eine ausgezeichnete Vorschau:
head -n 20 data.csv | csvlook
Wenn Sie die Struktur einer unbekannten Datei verstehen müssen, führen Sie csvstat aus. Das Tool analysiert Datentypen in jeder Spalte, findet fehlende Werte, berechnet Minimum, Maximum, Durchschnitt und zeigt eine Liste der häufigsten Werte:
csvstat data.csv
Slicing und Filterung
Traditionelle UNIX-Tools wie cut und grep scheitern bei komplexen CSVs oft, wenn Kommas oder Zeilenumbrüche in Anführungszeichen gesetzten Feldern auftreten. Das Paket bietet spezialisierte Alternativen:
csvcut schneidet die benötigten Spalten nach Name oder Nummer heraus:
csvcut -c "user_id,email,status" users.csv > clean_users.csv
csvgrep filtert Zeilen nach Werten oder regulären Ausdrücken:
csvgrep -c "status" -m "active" users.csv
SQL direkt auf Dateien
Einer der bequemsten Befehle ist csvsql. Es kann zwei Dinge tun. Erstens generiert es ein DDL-Schema für PostgreSQL, MySQL oder SQLite basierend auf der Analyse der Datentypen in der Datei. Zweitens ermöglicht es Ihnen, SQL-Abfragen direkt auf CSV-Dateien auf der Festplatte über eingebautes SQLite zu schreiben:
csvsql --query "select status, count(*) from users group by status" users.csv
Sie können auch zwei verschiedene Dateien zusammenfügen, als wären sie reguläre Datenbanktabellen:
csvsql --query "select u.name, o.total from users u join orders o on u.id = o.user_id" users.csv orders.csv
Formatkonvertierung
Das Tool in2csv konvertiert so gut wie alles nach CSV: Excel-Dateien (.xls und .xlsx), JSON, NDJSON und Fixed-Width. Es ist nicht nötig, Excel zu starten, nur um einen erhaltenen Bericht erneut zu speichern:
in2csv report.xlsx --sheet "Sales" > sales.csv
Wie es unter der Haube funktioniert
Das Paket ist in Python geschrieben und über PyPI verteilt. Es verwendet SQLAlchemy für Datenbankoperationen, was die Flexibilität von csvsql bei der Arbeit mit verschiedenen SQL-Dialekten erklärt.
Der Hauptvorteil der Architektur ist die Kompatibilität mit Standard-Eingabe und -Ausgabe (stdin/stdout). Befehle können einfach durch eine normale Pipe verkettet werden:
in2csv data.xlsx | csvgrep -c "country" -m "RU" | csvcut -c 1,3,5 | csvlook
Dieser Ansatz hat allerdings einen Nachteil. Da die Bibliothek in reinem Python mit Laufzeittypprüfung geschrieben ist, sinkt die Leistung bei Multi-Gigabyte-Dateien. Für Exporte im Terabyte-Maßstab sind Sie mit xsv in Rust oder duckdb besser bedient, aber für alltägliche Aufgaben bis zu ein paar hundert Megabyte ist csvkits Geschwindigkeit mehr als ausreichend.
Wo es in der Praxis nützlich ist
- Überprüfung der Datenstruktur auf einem Remote-Server ohne GUI.
- Vorbereinigung von Dateien in bash-Skripten vor dem Laden in eine ETL-Pipeline.
- Generierung von Datenbanktabellenschemata für einen neuen Export (
csvsql -i postgresql data.csv). - Schnelles Zusammenführen zweier verschiedener Dateien über einen gemeinsamen Schlüssel via
csvjoin.
Lohnt sich die Installation
Das Paket wird mit einem einzigen pip-Befehl installiert:
pip install csvkit
Wenn Sie häufig Logs parsen, mit Datenbankimporten arbeiten oder Berichte als Archive mit Excel und CSV erhalten, wird Ihnen dieses Toolset eine Menge Nerven sparen. Es eliminiert die Notwendigkeit, einen schweren Editor zu öffnen oder Einwegskripte für einfaches Filtern von zwei Spalten zu schreiben. Beginnen Sie mit csvlook und in2csv – sie amortisieren die Installation in den ersten fünf Minuten.
Ähnliche Projekte