- Immer wieder werden „überlegene“ Formate als Ersatz für CSV vorgestellt, doch die meisten beruhen auf verzerrten Vergleichen und übersehen die echten Stärken von CSV
- Dieser Text will nicht behaupten, dass CSV perfekt ist, sondern seine unterschätzten Vorteile beleuchten
- Gegen die Haltung, dass es cool wirkt, CSV zu hassen, erinnert er an den wahren Wert von CSV
1. CSV ist extrem einfach
- Die Definition von CSV steht schon im Namen: „comma-separated values“
- Zeilen werden durch Zeilenumbrüche, Spalten durch Kommata getrennt
- Wenn Werte Kommata oder Zeilenumbrüche enthalten, werden sie in Anführungszeichen gesetzt; Anführungszeichen selbst werden als doppelte Anführungszeichen dargestellt
- Ohne komplexe Spezifikation kann praktisch jeder das Format intuitiv verstehen und verwenden
- Für korrektes Parsing ist dennoch weiterhin ein dedizierter CSV-Parser nötig
2. CSV ist eine kollektive Idee
- Es hat keinen Eigentümer und ist nicht privatisiert
- Es gibt RFC 4180, doch die meisten sehen es eher als Referenz
- Es ist ein freies Format auf Basis gemeinsamer Regeln, die Entwickler weltweit implizit teilen
3. CSV ist Text
- Wie JSON, YAML oder XML ist es ein menschenlesbares reines Textformat
- Es lässt sich mit jedem Texteditor öffnen, und der Inhalt kann auch ohne spezielle Tools geprüft werden
- Auch die Wahl der Kodierung ist frei
4. CSV ist für Streaming optimiert
- Weil es zeilenweise gelesen wird, ist der Speicherverbrauch sehr gering
- Schon mit einfachem Code lassen sich mehrere Gigabyte Daten mit nur wenigen KB Speicher verarbeiten
- Spaltenorientierte Formate wie Parquet eignen sich schlecht für Streaming und erfordern komplexes Buffering
- Der Nachteil: Selbst wenn man nur bestimmte Spalten sehen will, muss man immer die ganze Zeile lesen
5. CSV lässt sich leicht anhängen
- Es ist sehr einfach, eine Datei im Append-Modus (
a+) zu öffnen und neue Zeilen ans Ende anzufügen
- Bei spaltenorientierten Formaten wie Parquet ist das Hinzufügen von Zeilen dagegen ineffizient und kompliziert
6. CSV unterstützt dynamische Typen
- Da es keine festen Typen gibt, lassen sich Daten flexibel interpretieren
- Beispiel: JavaScript kann 64-Bit-Ganzzahlen nicht sauber darstellen, CSV lässt sich jedoch ohne solche Einschränkungen verwenden
- Das ist ein Vorteil bei Sprachkompatibilität und Flexibilität
- Falsche Interpretation kann aber zu Fehlern führen → bei der Nutzung ist Vorsicht nötig
- Wenn hohe Performance gefragt ist, kann man Text auch ohne Decoding direkt auf Binärebene verarbeiten
7. CSV ist kompakt
- Der Header steht nur am Anfang der Datei, daher gibt es kaum Wiederholungen im Format
- JSON und XML haben durch wiederholte Schlüssel viel Overhead
- Auch die Darstellung von Zeichenketten ist bereits kompakt, und der Overhead des Formats selbst (Kommata, Anführungszeichen usw.) ist sehr gering
8. Auch umgedrehtes CSV ist weiterhin gültig
- CSV bleibt selbst dann gültiges CSV, wenn man es auf Byte-Ebene umdreht
- Das liegt an der Escape-Methode mit doppelten Anführungszeichen, die eine palindromische Escape-Form darstellt
- Dadurch lässt sich das Ende einer CSV-Datei sehr effizient lesen
- Beispiel: Wenn ein unterbrochener Prozess fortgesetzt werden soll, kann man nur die letzten paar Zeilen der Datei lesen und von dort neu starten
9. Excel hasst CSV
- Wenn Excel ein Format unbequem findet, ist das vielleicht sogar ein Zeichen dafür, dass man auf dem richtigen Weg ist
3 Kommentare
Einfach ist am besten!
Schlechter ist besser!
Hacker-News-Kommentare
Ich mag CSV- und INI-Dateien, weil sie einfach und textbasiert sind, keine in das Format eingebetteten Typen haben und nur aus Strings bestehen
CSV ist elegant, hat aber einen fatalen Makel – Anführungszeichen haben einen „nichtlokalen“ Effekt
Das Beste an CSV ist, dass jeder in 30 Minuten einen Parser schreiben kann
Wer CSV mag, wurde vermutlich noch nie gebeten, in einem Unternehmensumfeld CSV-Injection abzusichern
Es gibt viele Gründe, warum ich CSV mag
Ich entwickle derzeit eine Raspberry-Pi-basierte Lösung
Das Unspaßige an CSV ist, dass schnell geschriebene Parser und Serializer immer wieder denselben häufigen Fehler machen und Anführungszeichen falsch behandeln
Wenn das hier wirklich ein Liebesbrief wäre, wäre er im CSV-Format geschrieben
Die Einwände gegen JSON sind nicht besonders überzeugend
Als jemand, der moderne Formate mag, verwende ich im Zweifel CSV oder JSONL
grepdurchsuchen und streamen