Eine Liebeserklärung an das CSV-Format

28. März 2025
ℹ️Hinweis zur Quelle

Dieser Blogartikel wurde automatisch erstellt (und übersetzt). Er basiert auf dem folgenden Original, das ich für die Veröffentlichung auf diesem Blog ausgewählt habe:
xan/docs/LOVE_LETTER.md at master · medialab/xan · GitHub.

Eine Liebeserklärung an das CSV-Format

Oder warum Kritiker, die das Ende von CSV vorhersagen, falsch liegen

Regelmäßig erscheinen Artikel, die den nahenden Tod von CSV zugunsten vermeintlich überlegener Formate wie JSON oder ähnlichem verkünden. Diese Vergleiche sind jedoch oft einseitig und verkennen die Stärken, die CSV zu einem scheinbar unsterblichen Standard der Datenserialisierung machen.

Dieser Artikel soll eine Lanze für dieses oft zu Unrecht kritisierte Format brechen und seine Stärken beleuchten.

1. CSV ist denkbar einfach

Der Name ist Programm: „Comma Separated Values“ (Kommagetrennte Werte). Die Spezifikation ist kurz und bündig: Kommas trennen Werte, Zeilenumbrüche trennen Zeilen. Anführungszeichen umschließen Werte, die Kommas oder Zeilenumbrüche enthalten, und Anführungszeichen werden durch Verdopplung maskiert. Dieses Prinzip ist so einfach, dass man es beim Programmieren lernen quasi selbst erfinden könnte.

Dies bedeutet natürlich nicht, dass man auf dedizierte CSV-Parser verzichten sollte.

2. CSV ist eine kollektive Idee

Niemand besitzt CSV. Es gibt keine verbindliche Spezifikation, sondern nur eine Reihe von Regeln, die implizit akzeptiert werden. CSV ist und bleibt eine offene und freie kollektive Idee.

Wie JSON, YAML oder XML ist CSV reiner Text, der frei kodiert werden kann. Es ist kein binäres Format, kann mit jedem Texteditor geöffnet werden und benötigt keine spezielle Software. Dadurch kann es direkt von Menschen gelesen und bearbeitet werden.

3. CSV ist streamfähig

CSV kann Zeile für Zeile gelesen werden, ohne mehr Speicher zu benötigen als für eine einzelne Zeile. Ein einfaches Programm kann Gigabytes an CSV-Daten mit nur wenigen Kilobytes RAM verarbeiten.

Im Vergleich dazu können spaltenorientierte Datenformate wie Parquet Dateien nicht Zeile für Zeile streamen, ohne dass man im File hin und her springen muss oder den Speicher geschickt puffern muss, sodass die Leseleistung nicht beeinträchtigt wird.

Allerdings ist CSV ungeeignet, wenn man nur an bestimmten Spalten interessiert ist, da man die gesamte Zeile lesen muss, um auf den gewünschten Teil zuzugreifen.

Spaltenorientierte Datenformate sind besser für Dataframes geeignet, wie sie in R oder Pandas verwendet werden. Kritiker von CSV aus diesem Bereich konzentrieren sich oft auf Anwendungsfälle, in denen die Daten vollständig in den Speicher passen müssen.

4. CSV ist erweiterbar

Es ist einfach und effizient, neue Zeilen am Ende einer CSV-Datei hinzuzufügen. Die Datei wird einfach im Append-Modus geöffnet.

Spaltenorientierte Datenformate können dies nicht so einfach bewerkstelligen. Sie können als Dataframes auf der Festplatte betrachtet werden, und wie bei Dataframes ist das Hinzufügen einer Spalte sehr effizient, während das Hinzufügen einer neuen Zeile problematisch ist.

5. CSV ist dynamisch typisiert

CSV überlässt es dem Parser, die Datentypen zu interpretieren. Dies kann ein Vorteil sein, insbesondere bei der Verwendung verschiedener Programmiersprachen und Bibliotheken. Beispielsweise kann JavaScript keine 64-Bit-Integer darstellen. CSV bietet hier Flexibilität, birgt aber auch die Gefahr von Fehlinterpretationen.

6. CSV ist natürlich komprimiert

Da die Header nur einmal am Anfang der Datei stehen, ist die formale Wiederholung gering. Im Vergleich zu JSON oder XML, wo Schlüssel wiederholt werden müssen, ist CSV hier sparsamer. Dies bedeutet nicht, dass JSON und XML sich nicht gut komprimieren lassen, aber CSV zeichnet sich durch eine natürliche Kompaktheit aus.

Darüber hinaus sind Strings oft bereits optimal dargestellt, und der Overhead des Formats selbst (Kommas und Anführungszeichen) wird minimiert.

7. Umgekehrtes CSV ist immer noch gültiges CSV

Eine oft übersehene Eigenschaft: Eine umgekehrte CSV-Datei (Byte für Byte) ist immer noch gültiges CSV. Dies ist der intelligenten Maskierung von Anführungszeichen durch Verdopplung zu verdanken, was bedeutet, dass die Maskierung ein Palindrom ist. Dies wäre bei einem Backslash-basierten Maskierungsschema nicht der Fall.

Dies ermöglicht es, die letzten Zeilen einer CSV-Datei sehr effizient zu lesen. Die Bytes der Datei werden in umgekehrter Reihenfolge an einen CSV-Parser übergeben, die ausgegebenen Zeilen und ihre Zellen werden umgekehrt, und fertig. (Es empfiehlt sich eventuell die Header-Zeile zuvor zu lesen).

Dies bedeutet, dass CSV sehr gut als Möglichkeit verwendet werden kann, einen abgebrochenen Prozess effizient fortzusetzen. Die letzten Zeilen einer CSV-Datei können in konstanter Zeit gelesen und geparst werden, da nicht die gesamte Datei gelesen werden muss, sondern nur die Position am Ende der Datei, um die Bytes umgekehrt zu puffern und dem Parser zuzuführen.

Dies zeigt deutlich, dass CSV einiges richtig macht.


Die Kommentare sind geschlossen.