>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

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

Tabellen-Chaos direkt vom Terminal aus bändigen

Build status Coverage status PyPI downloads Version License Support Python versions

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

  1. Überprüfung der Datenstruktur auf einem Remote-Server ohne GUI.
  2. Vorbereinigung von Dateien in bash-Skripten vor dem Laden in eine ETL-Pipeline.
  3. Generierung von Datenbanktabellenschemata für einen neuen Export (csvsql -i postgresql data.csv).
  4. 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