Originales CSV
Geändertes CSV

CSV-Diff: Zwei CSV-Dateien online vergleichen

Zwei CSV-Dateien einfügen oder hochladen und die geänderten Zeilen, Preise und Felder nebeneinander sehen. Läuft im Browser, keine Anmeldung, kein Upload.

Was ist das CSV-Diff-Tool?

Ein kostenloses In-Browser-Tool zum Vergleichen von zwei CSV-Dateien. Den Lieferantenexport von gestern links einfügen, den von heute rechts, und die geänderten Zellen leuchten auf. Nichts verlässt dein Gerät. Kein Konto, kein Upload, kein Kontingent.

Der Diff selbst arbeitet auf Zeichenebene, mit einem semantischen Nachbearbeitungsschritt, der die Hervorhebungen auf den ganzen Feldwert zieht, statt sie zwischen den Kommas zu verteilen. Die Grammatik, die dieses Tool annimmt, ist die De-facto-CSV-Spezifikation RFC 4180: kommagetrennte Felder, optionale doppelte Anführungszeichen, verdoppelte Anführungszeichen zum Escapen eines literalen Anführungszeichens, CRLF-Zeilenenden.

Wenn du jemals zwei 8.000-Zeilen-Preislisten von Lieferanten in Excel geöffnet hast, Spalte für Spalte gescrollt bist, um den SKU mit dem geänderten Preis zu finden, und aufgegeben hast, ist das das Tool, das dich in Sekunden zur Änderung bringt. Für freie Prosa nutze unser Text-Diff-Tool. Für strukturierte Daten mit stabilen Schlüsseln verarbeitet JSON-Diff Objekt-Reordering deutlich besser, als CSV es je könnte. XML-Diff ist die richtige Wahl für Legacy-Datenexports aus älteren ERPs.

Wie der Diff tatsächlich arbeitet

Der Vergleich läuft Zeile für Zeile, zeichenbewusst. Einfügungen erscheinen rechts grün, Löschungen links rot. Der Lauf im Zeilenmodus hält die Performance bei 5-MB-Dateien akzeptabel, dann hebt eine Verfeinerung im Zeichenmodus auf den geänderten Zeilen das exakte Feld hervor, das sich bewegt hat. Bei den meisten Tabellenexports ist das schneller und sauberer als diff im Terminal.

Sei ehrlich, was das nicht ist. Es ist Text-Diff, kein echter, zeilenkennungsbewusster Vergleich. Wenn du Zeilen durch Sortieren nach einer anderen Spalte umordnest, sehen alle Zeilen geändert aus, obwohl die zugrunde liegenden Daten identisch sind. Bei Spaltenumordnung dasselbe. Es gibt hier kein Konzept eines Primärschlüssels, wie es csvjoin aus csvkit oder ein pandas-merge auf einen SKU bieten würde. Sortiere beide Dateien vor dem Einfügen gleich, oder greife zu einem dieser Werkzeuge, wenn du wirklich einen mengenbasierten Vergleich brauchst.

Die Kopfzeile ist für dieses Tool Daten. Zeile 1 wird wie jede andere Zeile behandelt, das heißt, eine Header-Umbenennung erscheint als einzeiliger Diff oben. Beim Reviewen von Schema-Drift ist das meist genau das, was du willst. Wenn nur die Datenzeilen interessieren, entferne den Header vor dem Einfügen auf beiden Seiten. Das CSV-Format selbst, einschließlich der Header-Konventionen, wird im Hintergrundartikel zu CSV beschrieben sowie in RFC 7111, die URI-Fragmente zur Auswahl von Zellbereichen innerhalb einer CSV-Ressource definiert.

CSV-Dateien in drei Schritten vergleichen

Zwei Textbereiche, ein Diff. Keine Anmeldung, kein Upload, keine Server-Runde.

  1. 1

    CSV einfügen oder hochladen

    Die ältere CSV links einfügen, die neuere rechts. Oder auf einer der beiden Seiten Hochladen klicken, um eine .csv-, .tsv- oder .txt-Datei direkt von der Platte zu laden. Der Beispiel-Button füllt beide Bereiche mit einer kleinen Produktpreisliste, damit du das Tool zuerst in Aktion siehst.

  2. 2

    Bei Bedarf Zeilenenden normalisieren

    Excel speichert CSV unter Windows mit CRLF (\r\n); Tools wie Pythons csv.writer oder eine Unix-Shell-Pipeline schreiben oft LF (\n). Wenn eine Seite CRLF und die andere LF ist, sieht jede Zeile geändert aus. Vor dem Einfügen beide im selben Editor öffnen (oder durch dos2unix schicken), damit die Enden zusammenpassen. Das UTF-8-BOM am Anfang einer von Excel gespeicherten CSV ist der andere klassische Übeltäter; entfernen, falls die andere Datei keines hat.

  3. 3

    Den Diff lesen

    Löschungen erscheinen links rot hervorgehoben, Einfügungen rechts grün. Eine Seite scrollen, die andere folgt. Achte auf geänderte Preise, neue Zeilen am Ende, mitten in der Liste korrigierte E-Mail-Adressen. Header-Änderungen erscheinen als einzeiliger Diff in Zeile 1.

Wann CSV-Diff das richtige Werkzeug ist

Eine Lieferanten-Inventar-CSV mit deinem letzten Export abgleichen

Ein Lieferant schickt wöchentlich eine frische Preisliste. Wirf die Datei der Vorwoche links rein, die der aktuellen Woche rechts, und Preisbewegungen auf SKU-Ebene springen heraus, ohne dass du in Excel 4.000 Zeilen scrollen musst, um zu finden, welche Zelle gelb wurde. Das in Excel mit VLOOKUP gegen ein zweites Blatt zu machen geht, ist aber langsam; der Diff ist schneller, wenn du nur einen kurzen Sanity-Check willst, bevor du die neuen Preise in den Shop schiebst.

Einen Datenbankexport gegen eine bereinigte Partner-Kopie vergleichen

Vor dem Versand eines Kunden-Dumps an einen Partner schwärzt du PII: Aus E-Mail wird [email protected], Telefon wird maskiert, vollständige Namen werden auf den Initial gekürzt. Diff den Quellexport gegen die bereinigte Kopie und stelle sicher, dass nur die geschwärzten Spalten verändert sind. Wenn unerwartet eine billing_address-Spalte im Diff auftaucht, hat dein Schwärzungsskript ein Feld übersehen, und du fängst es ab, bevor die Datei deinen Laptop verlässt.

Einen Produkt-Feed prüfen, bevor er in einen Händlerkatalog wandert

Google Merchant Center, Facebook Catalog und die meisten Marktplätze fressen einen CSV- (oder TSV-)Feed. Nachdem dein CMS den Feed neu erzeugt hat, diff ihn gegen die als gut bekannte Kopie von gestern Abend, um eine Regex zu fangen, die führende Nullen aus price entfernt hat, eine Verfügbarkeitsspalte, die in jeder Zeile wegen eines IF()-Bugs von in_stock auf out_of_stock gekippt ist, oder ein neues GTIN-Feld, das dein Team hinzugefügt hat, ohne irgendjemandem Bescheid zu geben.

Zwei Salesforce- oder HubSpot-CSV-Exports diffen

Wenn jemand aus Sales Ops fragt "welche Kontakte haben sich seit letzter Woche verändert?", exportiere denselben Report zweimal (damals und jetzt) und diffe die beiden Dateien. Die CSV ist standardmäßig nicht nach Record-ID sortiert, also sortiere zuerst beide Seiten nach der ID-Spalte; sonst sieht jede Zeile durcheinandergewürfelt aus. Nach der Sortierung treten die echten Änderungen klar hervor (ein Lead-Status wechselt von MQL auf SQL, eine E-Mail nach Bounce korrigiert).

Pipeline-Output mit dem von gestern vergleichen

Ein nächtlicher ETL-Job schreibt eine CSV nach S3. Die Zeilenzahl heute ist verdächtig anders als gestern. Beide Dateien holen, diffen, und du findest die Schema-Drift: mitten in der Tabelle ist eine neue Spalte aufgetaucht, weil die vorgelagerte API ein Feld ergänzt hat, was jede Zelle weiter rechts um eine Position verschoben hat. Der Diff fängt die strukturelle Änderung sofort ab, während ein reiner Zeilenzählcheck dir nur sagen würde, dass etwas nicht stimmt.

Eine A/B-Test-Ergebnis-CSV vom Stats-Team prüfen

Deine Data Scientist liefert eine CSV mit den Experimentergebnissen. Sie laufen die Analyse nach einer Methodik-Anpassung erneut. Diff v1 gegen v2: Haben sich nur die Teststatistik-Spalten geändert oder auch die Zuordnungszahlen (was bedeuten würde, dass sich die Kohortendefinition verschoben hat)? Outputs einer Analyse ehrlich zu diffen ist der billigste Sanity-Check, bevor du auf Basis des Ergebnisses ein Feature ausrollst.

CSV-Kurzreferenz

Ein kurzer Spickzettel zu den Parsing-Grenzfällen, die dieses Tool am häufigsten zutage bringt. Die Grammatik-Referenz ist RFC 4180 plus das, was echte Tabellenkalkulationen tatsächlich erzeugen.

TopicWhat this tool does
Anführungszeichen gemäß RFC 4180Felder, die Kommas, doppelte Anführungszeichen oder Zeilenumbrüche enthalten, müssen in doppelte Anführungszeichen gefasst werden. "Widget, small" ist ein Feld. Einfache Werte wie 4.99 brauchen keine Anführungszeichen. Siehe RFC 4180.
Escapete doppelte AnführungszeichenEin literales " innerhalb eines in Anführungszeichen gesetzten Feldes wird durch Verdoppeln escaped. "He said ""hi""" ist der Wert He said "hi". Backslash-Escaping ist kein Standard-CSV, auch wenn manche Tools es akzeptieren.
Eingebettete ZeilenumbrücheZeilenumbrüche sind innerhalb eines Anführungszeichen-Feldes gemäß RFC 4180 erlaubt. Eine mehrzeilige Adresse innerhalb einer Zelle ist gültiges CSV. Der Diff behandelt jede physische Zeile als Einheit, ein Feld mit Zeilenumbruch kann also Änderungen in der umschließenden Zeile zeigen.
Zeilenenden (CRLF vs. LF)RFC 4180 sagt CRLF (\r\n). Excel gibt CRLF aus. Die meisten Unix-Tools geben LF aus. Mischt man beide zwischen linkem und rechtem Bereich, sieht jede Zeile geändert aus. Vor dem Diffen Zeilenenden normalisieren.
BOM (UTF-8)Von Excel gespeicherte CSVs beginnen oft mit einem UTF-8-BOM (EF BB BF). Die Unicode-BOM-FAQ markiert es für UTF-8 als optional und unnötig. Ein nicht übereinstimmendes BOM zwischen den beiden Dateien erzeugt einen Phantom-Diff in Zeile 1.
Trennzeichen-DialekteKomma ist Standard; europäische Excel-Exports verwenden Semikolon (;), weil das Komma in vielen Locales das Dezimaltrennzeichen ist. TSV (tabgetrennt) ist eine verbreitete Variante; siehe den TSV-Hintergrund. Beide Dateien müssen denselben Trenner verwenden, damit der Diff sinnvoll ist.
KopfzeilenDieses Tool behandelt Zeile 1 als Daten. Eine Spaltenumbenennung erscheint als einzeiliger Diff oben. Wenn nur Datenzeilen verglichen werden sollen, vor dem Einfügen aus beiden Bereichen die Kopfzeile entfernen. Die meisten Parser (Pythons csv.DictReader, pandas) behandeln Zeile 1 per Konvention als Header, das Format selbst verlangt es nicht.
CodierungIm Browser nur UTF-8 via FileReader. Latin-1 (ISO-8859-1) und Windows-1252 laden, zeigen aber kaputte Akzentzeichen. Vor dem Einfügen mit iconv oder VS Codes "Save with Encoding" konvertieren.

CSV-Diff: häufige Fragen

Erzeugt das Umordnen von CSV-Zeilen oder -Spalten einen verrauschten Diff?

Ja: Die Engine vergleicht Zeichen Zeile für Zeile, also werden Zeilen- oder Spaltenumordnungen als Differenzen angezeigt, auch wenn die zugrunde liegenden Daten identisch sind. Es ist ein Text-Diff mit ein paar CSV-bewussten Lesehilfen. Es gibt kein Matching nach Zeilenkennung, kein Bewusstsein für Spaltenumordnung, kein semantisches Verständnis von Typen. Für diese Vergleichstiefe nimm ein Tool wie csvkit, pandas mit einem Merge auf Primärschlüssel, oder lade beide Dateien in SQLite und führe eine EXCEPT-Abfrage aus. Für den Tabellenvergleich im Alltag deckt dieses Tool das Meiste ab.

Wie gehe ich mit CRLF-Zeilenenden von Windows vs. LF unter Unix um?

Excel schreibt CSV mit CRLF (\r\n), Pythons csv.writer schreibt typischerweise LF (\n), und eine Shell-Pipeline kann je nach Flags beides liefern. Wenn ein Bereich CRLF ist und der andere LF, sieht der Diff in jeder einzelnen Zeile einen Unterschied. Die Lösung ist, beide Seiten vor dem Einfügen zu normalisieren: in demselben Editor öffnen und mit einem Zeilenende speichern, oder eine Seite durch dos2unix oder unix2dos schicken. RFC 4180 schreibt CRLF vor, aber CSV-Dateien in der Praxis verwenden beides.

Bewältigt das Tool Spaltenumordnung?

Nein. Das ist ein Text-Diff Zeile für Zeile. Wenn Zeile 1 links die Spaltenreihenfolge sku,name,price hat und rechts name,sku,price, sieht jede Zelle in jeder Zeile geändert aus, weil der Diff Roh-Text sieht und kein Spaltenmodell. Dasselbe gilt, wenn du beide Dateien nach unterschiedlichen Spalten sortierst. Sortiere Spalten und Zeilen so, dass sie zueinanderpassen, bevor du diffst, oder greife zu einem zeilenkennungsbewussten Werkzeug wie csvjoin aus csvkit oder einem pandas-merge, wenn das Spaltenmodell wirklich zählt.

Wie geht das Tool mit dem UTF-8-BOM um, das Excel hinzufügt?

Excel unter Windows schreibt oft am Anfang einer CSV ein UTF-8-Byte-Order-Mark (die Bytes EF BB BF), obwohl die Unicode-BOM-FAQ sagt, dass es für UTF-8 unnötig ist. Wenn eine deiner Dateien ein BOM hat und die andere nicht, siehst du in Zeile 1, Spalte 1 einen Phantom-Diff von einem Zeichen. Datei in einem ordentlichen Texteditor öffnen (VS Code, Notepad++, Sublime) und ohne BOM neu speichern, oder die ersten drei Bytes vor dem Einfügen manuell entfernen.

Welche Encodings akzeptiert das Tool?

UTF-8 ist die einzige Codierung, die der FileReader-Pfad hier korrekt dekodiert. Eine Latin-1- oder Windows-1252-Datei lädt zwar, aber Akzentzeichen sehen kaputt aus (z. B. café wird zu café). UTF-16 mit BOM erscheint vollständig zerbrochen. Konvertiere Nicht-UTF-8-Dateien zuerst: im Terminal iconv -f WINDOWS-1252 -t UTF-8 input.csv > out.csv; in VS Code "Reopen with Encoding" und dann "Save with Encoding" auf UTF-8. Das csv-Modul von Python und pandas erlauben beide, beim Lesen die Quellcodierung anzugeben.

Wie groß darf eine CSV-Datei zum Diffen sein?

Bis zu ein paar MB ist okay und fühlt sich sofort an. Über 10 MB beginnt der Browser es zu spüren, und der Großteil des Aufwands ist das Rendern des hervorgehobenen Diffs (nicht das Berechnen). Für sehr große Exports (50 MB+) filtere zuerst beide Dateien auf die Spalten oder Zeilen, die dich wirklich interessieren. csvcut und csvgrep aus csvkit, jq für CSV-zu-JSON, oder ein schnelles awk/grep sind alle gute Vorverarbeitungen. Dann den getrimmten Ausschnitt hier einfügen.

Datenschutz und wie das funktioniert

Deine CSV verlässt deinen Browser nie. Reader, Diff und Rendering laufen alle auf deinem Gerät, lokal. Keine Analytics auf deine Eingabe, keine Logs, kein "hilfreicher" Cloud-Umweg. Zum Prüfen die DevTools öffnen, auf den Network-Tab wechseln und beobachten. Beim Vergleichen gibt es keine ausgehenden Requests. Die Format-Referenz ist RFC 4180, und die Dokumentation des csv-Moduls von Python ist die Referenz, gegen die wir Parsing-Grenzfälle prüfen.