CSV-diff: vergelijk twee CSV-bestanden online
Plak of upload twee CSV-bestanden en zie de gewijzigde rijen, prijzen en velden naast elkaar. Draait in je browser, geen account, geen upload.
Wat is de CSV-diff-tool?
Een gratis tool in je browser om twee CSV-bestanden te vergelijken. Plak de leveranciersexport van gisteren links, die van vandaag rechts, en de gewijzigde cellen lichten op. Niets verlaat je computer. Geen account, geen upload, geen quotum.
De diff zelf is op tekenniveau, met een semantische nabewerking die de markeringen op de hele veldwaarde trekt in plaats van ze tussen de komma's te verspreiden. De grammatica die deze tool aanneemt is de feitelijke CSV-spec, RFC 4180: door komma's gescheiden velden, optionele dubbele aanhalingstekens, verdubbelde aanhalingstekens om een letterlijk aanhalingsteken te escapen, CRLF-regeleinden.
Heb je ooit twee leveranciersprijslijsten van 8.000 rijen in Excel geopend, kolom voor kolom gescrolld om de SKU te vinden waarvan de prijs verschoof, en het opgegeven, dan brengt deze tool je in seconden bij die wijziging. Voor vrije tekst gebruik je onze tekst-diff-tool. Voor gestructureerde data met stabiele sleutels gaat JSON-diff veel beter om met objecthervolgorde dan CSV ooit kan. XML-diff is de juiste keuze voor legacy-data-exports uit oudere ERP's.
Hoe de diff werkelijk werkt
De vergelijking is regel-voor-regel, tekenbewust. Toevoegingen verschijnen rechts in groen, verwijderingen links in rood. De regelmodus-pas houdt prestaties redelijk op bestanden van 5 MB, daarna brengt een verfijning op tekenniveau over de gewijzigde regels het exacte veld naar boven dat verschoof. Voor de meeste spreadsheet-exports is dit sneller en netter dan diff in een terminal draaien.
Eerlijk over wat dit niet is: het is tekstdiff, geen echte rij-sleutel-bewuste vergelijking. Hervolg je rijen door op een andere kolom te sorteren, dan ziet elke regel er gewijzigd uit ook al zijn de onderliggende data identiek. Bij het herordenen van kolommen idem. Er is hier geen begrip van een primaire sleutel, zoals csvjoin uit csvkit of een pandas-merge op een SKU dat zou geven. Sorteer beide bestanden vóór het plakken op dezelfde manier, of gebruik een van die tools wanneer je echt verzamelingsgewijze vergelijking nodig hebt.
De headerregel is data voor deze tool. Regel 1 wordt net als elke andere regel behandeld, dus het hernoemen van een header verschijnt als een eenregelige diff bovenaan. Bij het reviewen van schemadrift is dat meestal precies wat je wilt. Geef je alleen om body-rijen, strip dan de header van beide kanten voor het plakken. Het CSV-formaat zelf, inclusief headerconventies, wordt beschreven in het achtergrondartikel over CSV en in RFC 7111, dat URI-fragmenten definieert om celbereiken binnen een CSV-bron te selecteren.
CSV-bestanden vergelijken in drie stappen
Twee tekstpanelen, één diff. Geen account, geen upload, geen ronde naar de server.
- 1
Plak of upload je CSV
Plak de oudere CSV links en de nieuwere rechts. Of klik aan een van beide kanten op Uploaden om een .csv-, .tsv- of .txt-bestand rechtstreeks van de schijf te laden. De Voorbeeld-knop vult beide panelen met een kleine prijslijst zodat je de tool eerst aan het werk ziet.
- 2
Normaliseer regeleinden indien nodig
Excel slaat CSV op met CRLF (\r\n) op Windows; tools als Pythons csv.writer of een Unix-shell-pipeline schrijven vaak LF (\n). Als de ene kant CRLF is en de andere LF, lijkt elke regel gewijzigd. Open beide in dezelfde editor (of haal er dos2unix overheen) voor het plakken zodat de regeleinden overeenkomen. Een UTF-8-BOM aan het begin van een door Excel opgeslagen CSV is de andere klassieke boosdoener; strip die als je andere bestand er geen heeft.
- 3
Lees de diff
Verwijderingen verschijnen met rode markering links, toevoegingen met groene markering rechts. Scroll aan een kant en de ander volgt. Let op gewijzigde prijzen, nieuwe rijen onderaan toegevoegd en e-mailadressen die middenin de lijst zijn gecorrigeerd. Headerwijzigingen verschijnen als een eenregelige diff op regel 1.
Wanneer CSV-diff de juiste tool is
Een leveranciers-inventaris-CSV afstemmen tegen je laatste export
Een leverancier stuurt wekelijks een verse prijslijst. Drop het bestand van vorige week in het linker paneel, dat van deze week rechts, en prijswijzigingen op SKU-niveau springen eruit zonder dat je 4.000 rijen in Excel moet doorscrollen om te vinden welke cel geel werd. Het in Excel doen met VLOOKUP tegen een tweede sheet kan, maar is traag; de diff is sneller als je gewoon een snelle controle wilt voor je de nieuwe prijzen in je shop pusht.
Een database-export vergelijken met een gesaneerde partner-kopie
Voor je een klantendump naar een partner stuurt, redacteer je PII: e-mail wordt [email protected], telefoon wordt gemaskeerd, volledige namen worden tot een initiaal ingekort. Diff de bron-export tegen de gesaneerde kopie en bevestig dat alleen de geredigeerde kolommen veranderd zijn. Verschijnt er onverwacht een billing_address-kolom in de diff, dan heeft je redactie-script een veld gemist en pak je het voor het bestand je laptop verlaat.
Een productfeed auditen voor je hem naar een merchant-catalogus pusht
Google Merchant Center, Facebook Catalog en de meeste marketplaces eten een CSV- (of TSV-)feed. Nadat je CMS de feed regenereert, diff je hem tegen de known-good kopie van gisteravond om een regex te vangen die afsluitende nullen uit price stripte, een beschikbaarheidskolom die door een IF()-bug op elke rij van in_stock naar out_of_stock klapte, of een nieuw GTIN-veld dat je team toevoegde zonder iemand te waarschuwen.
Twee Salesforce- of HubSpot-CSV-exports diffen
Wanneer een sales op vraagt "welke contacten zijn er sinds vorige week veranderd?", exporteer je hetzelfde rapport tweemaal (toen en nu) en diff je de twee bestanden. De CSV is standaard niet op record-ID gesorteerd, dus sorteer eerst beide kanten op de ID-kolom; anders lijkt elke rij door elkaar geschud. Eenmaal gesorteerd komen echte wijzigingen (een lead-status van MQL naar SQL, een e-mail gecorrigeerd na een bounce) duidelijk naar boven.
Pipeline-output vergelijken met die van gisteren
Een nachtelijke ETL-job schrijft een CSV naar S3. Het rij-aantal van vandaag wijkt verdacht af van dat van gisteren. Trek beide bestanden binnen, diff ze, en je vindt de schemadrift: er verscheen midden in de tabel een nieuwe kolom omdat de upstream-API een veld toevoegde, wat elke cel stroomafwaarts één positie verschoof. De diff vangt de structurele wijziging direct, terwijl een check op het rij-aantal alleen je hooguit zou vertellen dat er iets niet klopt.
Een A/B-test-resultaat-CSV van het stats-team reviewen
Je data scientist levert een CSV met de experimentresultaten. Ze draaien de analyse opnieuw na een methodologische tweak. Diff v1 tegen v2: zijn alleen de teststatistiek-kolommen veranderd, of bewogen ook de toewijzingsaantallen (wat zou betekenen dat de cohortdefinitie verschoof)? Eerlijk diffen van analyse-output is de goedkoopste sanity check voor je een feature uitbrengt op basis van het resultaat.
Snelle CSV-referentie
Een korte spiekbrief voor de parsing-randgevallen die deze tool het vaakst aan het licht brengt. De grammaticareferentie is RFC 4180 plus wat echte spreadsheet-tools daadwerkelijk produceren.
| Topic | What this tool does |
|---|
| Aanhalingstekens volgens RFC 4180 | Velden met komma's, dubbele aanhalingstekens of regeleinden moeten in dubbele aanhalingstekens worden gezet. "Widget, small" is één veld. Eenvoudige waarden als 4.99 hebben geen aanhalingstekens nodig. Zie RFC 4180. |
|---|
| Geëscapete dubbele aanhalingstekens | Een letterlijke " binnen een veld met aanhalingstekens wordt geëscapet door hem te verdubbelen. "He said ""hi""" is de waarde He said "hi". Backslash-escaping is geen standaard-CSV, ook al accepteren sommige tools het. |
|---|
| Ingebedde regeleinden | Regeleinden zijn binnen een veld met aanhalingstekens toegestaan volgens RFC 4180. Een meerregelig adres binnen één cel is geldige CSV. De diff behandelt elke fysieke regel als een eenheid, dus een veld met regeleinde kan wijzigingen op de omhullende regel tonen. |
|---|
| Regeleinden (CRLF vs LF) | RFC 4180 schrijft CRLF voor (\r\n). Excel produceert CRLF. De meeste Unix-tools produceren LF. Beide mengen tussen het linker en rechter paneel laat elke regel gewijzigd lijken. Normaliseer regeleinden voor het diffen. |
|---|
| BOM (UTF-8) | Door Excel opgeslagen CSVs beginnen vaak met een UTF-8-BOM (EF BB BF). De Unicode-BOM-FAQ markeert het als optioneel en onnodig voor UTF-8. Een ongelijke BOM tussen de twee bestanden produceert een fantoom-diff op regel 1. |
|---|
| Scheidingsteken-dialecten | Komma is de standaard; Europese Excel-exports gebruiken puntkomma (;) omdat de komma in veel locales het decimaalteken is. TSV (tab-gescheiden) is een gangbare variant; zie de TSV-achtergrond. Beide bestanden moeten hetzelfde scheidingsteken gebruiken voor een zinvolle diff. |
|---|
| Headerregels | Deze tool behandelt regel 1 als data. Een kolomhernoeming verschijnt als eenregelige diff bovenaan. Wil je alleen body-rijen vergelijken, strip dan de header uit beide panelen voor het plakken. De meeste parsers (Pythons csv.DictReader, pandas) behandelen regel 1 conventioneel als header, maar het bestandsformaat eist het niet. |
|---|
| Encoding | Alleen UTF-8 via de FileReader in de browser. Latin-1 (ISO-8859-1) en Windows-1252 laden wel maar tonen verminkte geaccentueerde tekens. Converteer met iconv of "Save with Encoding" in VS Code voor het plakken. |
|---|
CSV-diff: veelgestelde vragen
Levert het herordenen van CSV-rijen of -kolommen een rommelige diff op?
Ja: de engine vergelijkt tekens regel voor regel, dus rijen of kolommen herordenen toont als verschillen ook al zijn de onderliggende data identiek. Het is een tekstdiff, met een paar CSV-bewuste leeshulpen. Er is geen rij-sleutel-matching, geen besef van kolomhervolgorde en geen semantisch begrip van types. Voor dat niveau van vergelijking gebruik je een tool als csvkit, pandas met een merge op primaire sleutel, of laad beide bestanden in SQLite en draai een EXCEPT-query. Voor dagelijkse spreadsheet-vergelijking dekt deze tool het meeste.
Hoe ga ik om met CRLF-regeleinden van Windows vs LF op Unix?
Excel schrijft CSV met CRLF (\r\n), Pythons csv.writer schrijft meestal LF (\n), en een shell-pipeline kan beide produceren afhankelijk van de flags. Als het ene paneel CRLF is en het andere LF, ziet de diff op elke regel een verschil. De fix is beide kanten te normaliseren voor het plakken: open ze in dezelfde editor en sla op met één regeleinde, of stuur er één door dos2unix of unix2dos. RFC 4180 verplicht CRLF, maar real-world CSV-bestanden gebruiken beide.
Verwerkt de tool kolomhervolgorde?
Nee. Dit is een regel-voor-regel-tekstdiff. Als rij 1 links de kolommen in de volgorde sku,name,price heeft en rechts name,sku,price, lijkt elke cel op elke regel gewijzigd omdat de diff ruwe tekst ziet, geen kolommodel. Hetzelfde geldt als je beide bestanden op verschillende kolommen sorteert. Hervolg kolommen en rijen zodat ze overeenkomen voor het diffen, of grijp naar een rij-sleutel-bewuste tool als csvjoin van csvkit of een pandas-merge wanneer het kolommodel echt telt.
Hoe gaat de tool om met de UTF-8-BOM die Excel toevoegt?
Excel op Windows schrijft vaak een UTF-8 byte order mark aan het begin van een CSV (de bytes EF BB BF), ook al zegt de Unicode-BOM-FAQ dat het niet nodig is voor UTF-8. Heeft een van je bestanden een BOM en het andere niet, dan zie je een fantoom-diff van één teken op regel 1, kolom 1. Open het bestand in een fatsoenlijke teksteditor (VS Code, Notepad++, Sublime) en sla opnieuw op zonder BOM, of strip de eerste drie bytes met de hand voor het plakken.
Welke encodings accepteert de tool?
UTF-8 is de enige encoding die het FileReader-pad hier correct decodeert. Een Latin-1- of Windows-1252-bestand laadt wel, maar geaccentueerde tekens zien er verminkt uit (bijv. café wordt café). UTF-16 met BOM ziet er volledig stuk uit. Converteer niet-UTF-8-bestanden eerst: in de terminal iconv -f WINDOWS-1252 -t UTF-8 input.csv > out.csv; in VS Code "Reopen with Encoding" en dan "Save with Encoding" naar UTF-8. Pythons csv-module en pandas laten je beide de bron-encoding opgeven bij het lezen.
Hoe groot mag een CSV zijn om te diffen?
Tot een paar MB is prima en voelt direct. Voorbij 10 MB begint de browser het te merken, en het meeste van de kost is het renderen van de gemarkeerde diff (niet het berekenen). Voor zeer grote exports (50 MB+) filter je beide bestanden eerst tot de kolommen of rijen die je echt nodig hebt. csvcut en csvgrep van csvkit, jq voor naar JSON geconverteerd CSV, of een snelle awk/grep zijn allemaal prima voor-passes. Plak daarna het bijgesneden plakje hier.
Privacy en hoe dit werkt
Je CSV verlaat je browser nooit. De reader, de diff en de rendering draaien allemaal op je eigen machine, lokaal. Geen analytics op je input, geen logs, geen "behulpzame" cloud-omweg. Om het te checken open je DevTools, schakel je naar het Network-tabblad en kijk je. Er gaan geen requests uit als je vergelijkt. De formaatreferentie is RFC 4180, en de documentatie van Pythons csv-module is de referentie waar we parsing-randgevallen tegen aftoetsen.