CSV-diff: sammenlign to CSV-filer online
Indsæt eller upload to CSV-filer, og se de ændrede rækker, priser og felter side om side. Kører i din browser, ingen oprettelse, intet upload.
Hvad er CSV-diff-værktøjet?
Et gratis værktøj i browseren til at sammenligne to CSV-filer. Indsæt gårsdagens leverandøreksport til venstre og dagens til højre, og de ændrede celler lyser op. Intet forlader din maskine. Ingen konto, intet upload, ingen kvote.
Selve diffen er på tegnniveau med en semantisk efterbehandling, der trækker fremhævningerne hen på hele feltværdien i stedet for at sprede dem mellem kommaerne. Den grammatik, dette værktøj antager, er den de facto-CSV-specifikation, RFC 4180: kommaadskilte felter, valgfrie dobbelte anførselstegn, fordoblede anførselstegn til at escape et bogstaveligt anførselstegn, CRLF-linjeskift.
Hvis du nogensinde har åbnet to leverandørprislister på 8.000 rækker i Excel, scrollet kolonne for kolonne for at finde det SKU, hvis pris flyttede sig, og givet op, er dette værktøjet, der bringer dig hen til ændringen på sekunder. Til fri prosa, brug vores tekst-diff-værktøj. Til strukturerede data med stabile nøgler håndterer JSON-diff objektomrokering langt bedre, end CSV nogensinde kan. XML-diff er det rigtige valg til legacy-dataeksporter fra ældre ERP-systemer.
Hvordan diffen faktisk virker
Sammenligningen er linje for linje, tegnbevidst. Indsættelser vises i grønt til højre, sletninger i rødt til venstre. Linjetilstandsgennemløbet holder ydelsen rimelig på 5 MB-filer, og en finjustering i tegntilstand på de ændrede linjer trækker derefter det præcise felt frem, der har flyttet sig. For de fleste regnearkseksporter er det hurtigere og renere end at køre diff i en terminal.
Vær ærlig om, hvad det ikke er. Det er tekst-diff, ikke en sammenligning, der reelt er bevidst om rækkenøgler. Hvis du omrokerer rækker ved at sortere efter en anden kolonne, ser hver linje ændret ud, selvom de underliggende data er identiske. Hvis du omrokerer kolonner, sker det samme. Der er ikke nogen forestilling om en primærnøgle her, sådan som csvjoin fra csvkit eller en pandas-merge på et SKU ville give. Sortér begge filer på samme måde før indsætning, eller brug et af de værktøjer, når du virkelig har brug for mængdebaseret sammenligning.
Overskriftsrækken er data for dette værktøj. Linje 1 behandles som enhver anden linje, hvilket betyder, at en omdøbning af en overskrift vises som en enkeltlinjes diff i toppen. Det er normalt det, du ønsker, når du gennemgår skema-drift. Hvis du kun bekymrer dig om datarækker, så fjern overskriften fra begge sider før indsætning. Selve CSV-formatet, herunder overskriftskonventioner, er beskrevet i baggrundsartiklen om CSV og i RFC 7111, der definerer URI-fragmenter til at vælge celleintervaller inden for en CSV-ressource.
Sådan sammenligner du CSV-filer i tre trin
To tekstpaneler, én diff. Ingen oprettelse, intet upload, ingen tur til serveren.
- 1
Indsæt eller upload din CSV
Indsæt den ældre CSV til venstre og den nyere til højre. Eller klik på Upload på en af siderne for at indlæse en .csv-, .tsv- eller .txt-fil direkte fra disken. Eksempel-knappen fylder begge paneler med en lille produktprisliste, så du først ser værktøjet i gang.
- 2
Normaliser linjeskift om nødvendigt
Excel gemmer CSV med CRLF (\r\n) på Windows; værktøjer som Pythons csv.writer eller en Unix-shell-pipeline skriver ofte LF (\n). Hvis den ene side er CRLF og den anden LF, ser hver linje ændret ud. Åbn begge i den samme editor (eller kør gennem dos2unix) før indsætningen, så linjeskiftene matcher. UTF-8-BOM i starten af en Excel-gemt CSV er den anden klassiske skurk; fjern den, hvis din anden fil ikke har en.
- 3
Læs diffen
Sletninger vises med rød fremhævelse til venstre, indsættelser med grøn fremhævelse til højre. Scroll på en af siderne, den anden følger med. Hold øje med ændrede priser, nye rækker tilføjet i bunden og e-mailadresser rettet midt i listen. Overskriftsændringer vises som en enkeltlinjes diff på linje 1.
Hvornår CSV-diff er det rigtige værktøj
Afstemme en leverandør-lager-CSV mod din seneste eksport
En leverandør sender en frisk prisliste hver uge. Smid sidste uges fil i venstre panel, denne uges til højre, og prisbevægelser på SKU-niveau springer frem uden at du skal scrolle 4.000 rækker i Excel og lede efter, hvilken celle der blev gul. At gøre det i Excel med VLOOKUP mod et andet ark kan lade sig gøre, men er langsomt; diffen er hurtigere, når du bare skal lave et hurtigt sundhedstjek, før du skubber de nye priser i butikken.
Sammenligne en databaseeksport med en saneret partnerkopi
Før du sender en kundedump til en partner, redigerer du PII: e-mail bliver til [email protected], telefon maskeres, fulde navne forkortes til initial. Diff den oprindelige eksport mod den sanerede kopi og bekræft, at kun de redigerede kolonner er ændrede. Hvis en billing_address-kolonne uventet dukker op i diffen, har dit redigeringsscript misset et felt, og du fanger det, før filen forlader laptoppen.
Auditere et produktfeed, før det skubbes til en handelskatalog
Google Merchant Center, Facebook Catalog og de fleste markedspladser sluger et CSV- (eller TSV-)feed. Når dit CMS har genereret feedet på ny, så diff det mod gårsdagens kendte gode kopi for at fange en regex, der har fjernet efterstillede nuller fra price, en tilgængelighedskolonne, der på grund af en IF()-fejl er gået fra in_stock til out_of_stock på hver række, eller et nyt GTIN-felt, dit team har tilføjet uden at sige noget.
Diffe to Salesforce- eller HubSpot-CSV-eksporter
Når en sales op spørger "hvilke kontakter er ændret siden sidste uge?", så eksportér den samme rapport to gange (dengang og nu) og diff de to filer. CSV'en er ikke sorteret efter post-ID som standard, så sortér først begge sider efter ID-kolonnen; ellers ser hver række ud til at være rodet sammen. Når den er sorteret, træder reelle ændringer tydeligt frem (en lead-status flyttet fra MQL til SQL, en e-mail rettet efter et bounce).
Sammenligne pipeline-output med gårsdagens
Et natligt ETL-job skriver en CSV til S3. Antallet af rækker i dag er mistænkeligt anderledes end i går. Hent begge filer, diff dem, og du finder skema-driften: en ny kolonne dukkede op midt i tabellen, fordi det opstrøms API tilføjede et felt, og det rykkede hver celle nedstrøms én plads. Diffen fanger den strukturelle ændring med det samme, hvor en ren rækkekontrol kun ville have fortalt dig, at noget var galt.
Gennemgå en A/B-test-resultat-CSV fra statistikholdet
Din data scientist leverer en CSV med eksperimentresultaterne. De kører analysen igen efter en metodejustering. Diff v1 mod v2: ændrede kun teststatistik-kolonnerne sig, eller flyttede tildelingstællingerne sig også (hvilket ville betyde, at kohortdefinitionen flyttede sig)? At diffe analyseoutput ærligt er det billigste sundhedstjek, før du frigiver en feature baseret på resultatet.
Hurtig CSV-reference
En kort huskeseddel til de parsing-grænsetilfælde, dette værktøj oftest får frem. Grammatikreferencen er RFC 4180 plus det, rigtige regnearksværktøjer faktisk udsender.
| Topic | What this tool does |
|---|
| Citation efter RFC 4180 | Felter, der indeholder kommaer, dobbelte anførselstegn eller linjeskift, skal være indkapslet i dobbelte anførselstegn. "Widget, small" er ét felt. Almindelige værdier som 4.99 har ikke brug for anførselstegn. Se RFC 4180. |
|---|
| Escapede dobbelte anførselstegn | Et bogstaveligt " inden i et anført felt escapes ved at fordoble det. "He said ""hi""" er værdien He said "hi". Backslash-escape er ikke standard-CSV, selvom nogle værktøjer accepterer det. |
|---|
| Indlejrede linjeskift | Linjeskift er tilladt inden i et anført felt ifølge RFC 4180. En adresse over flere linjer i én celle er gyldig CSV. Diffen behandler hver fysisk linje som en enhed, så et felt med et linjeskift kan vise ændringer på den omsluttende linje. |
|---|
| Linjeskift (CRLF vs LF) | RFC 4180 siger CRLF (\r\n). Excel udsender CRLF. De fleste Unix-værktøjer udsender LF. At blande de to mellem venstre og højre panel får hver linje til at se ændret ud. Normaliser linjeskift før diffning. |
|---|
| BOM (UTF-8) | Excel-gemte CSV-filer starter ofte med en UTF-8-BOM (EF BB BF). Unicode-BOM-FAQ markerer den som valgfri og unødvendig for UTF-8. En uensartet BOM mellem de to filer producerer en spøgelses-diff på linje 1. |
|---|
| Adskillerdialekter | Komma er standard; europæiske Excel-eksporter bruger semikolon (;), fordi kommaet er decimaltegnet i mange lokaliteter. TSV (tabelseparerede) er en almindelig variant; se TSV-baggrunden. Begge filer skal bruge samme adskiller, for at en diff giver mening. |
|---|
| Overskriftsrækker | Dette værktøj behandler linje 1 som data. En kolonneomdøbning vises som en enkeltlinjes diff i toppen. Hvis du kun vil sammenligne datarækker, så fjern overskriften fra begge paneler før indsætning. De fleste parsere (Pythons csv.DictReader, pandas) behandler linje 1 som en overskrift efter konvention, men selve filformatet kræver det ikke. |
|---|
| Kodning | Kun UTF-8 via FileReader i browseren. Latin-1 (ISO-8859-1) og Windows-1252 indlæses, men accenttegn vises forvanskede. Konvertér med iconv eller VS Codes "Save with Encoding" før indsætning. |
|---|
CSV-diff: ofte stillede spørgsmål
Vil omrokering af CSV-rækker eller -kolonner give en støjende diff?
Ja: motoren sammenligner tegn linje for linje, så omrokering af rækker eller kolonner vil vises som forskelle, selv når de underliggende data er identiske. Det er en tekst-diff med et par CSV-bevidste læsehjælpemidler. Der er ingen rækkenøglematchning, ingen bevidsthed om kolonneomrokering og ingen semantisk forståelse af typer. For det niveau af sammenligning, brug et værktøj som csvkit, pandas med en merge på primærnøgle, eller læs begge filer ind i SQLite og kør en EXCEPT-forespørgsel. Til daglig regnearkssammenligning dækker dette værktøj det meste af det, du har brug for.
Hvordan håndterer jeg CRLF-linjeskift fra Windows kontra LF på Unix?
Excel skriver CSV med CRLF (\r\n), Pythons csv.writer skriver typisk LF (\n), og en shell-pipeline kan producere det ene eller det andet alt efter flag. Hvis det ene panel er CRLF og det andet LF, ser diffen en forskel på hver eneste linje. Løsningen er at normalisere begge sider før indsætning: åbn dem i samme editor og gem med ét linjeskift, eller kør den ene gennem dos2unix eller unix2dos. RFC 4180 påbyder CRLF, men virkelige CSV-filer bruger begge.
Håndterer værktøjet kolonneomrokering?
Nej. Dette er en tekst-diff linje for linje. Hvis række 1 har kolonnerne i rækkefølgen sku,name,price til venstre og name,sku,price til højre, ser hver celle på hver linje ændret ud, fordi diffen ser rå tekst og ikke en kolonnemodel. Det samme gælder, hvis du sorterer de to filer på forskellige kolonner. Omrokér kolonner og rækker, så de matcher, før du differ, eller ræk efter et rækkenøglebevidst værktøj som csvjoin fra csvkit eller en pandas-merge, når kolonnemodellen virkelig betyder noget.
Hvordan håndterer værktøjet UTF-8-BOM, som Excel tilføjer?
Excel under Windows skriver ofte et UTF-8-byte-order-mark i starten af en CSV (byten EF BB BF), selvom Unicode-BOM-FAQ siger, at det er unødvendigt for UTF-8. Hvis en af dine filer har en BOM, og den anden ikke har, vil du se en spøgelses-diff på ét tegn på linje 1, kolonne 1. Åbn filen i en ordentlig teksteditor (VS Code, Notepad++, Sublime) og gem på ny uden BOM, eller fjern de første tre bytes manuelt før indsætning.
Hvilke kodninger accepterer værktøjet?
UTF-8 er den eneste kodning, FileReader-stien afkoder korrekt her. En Latin-1- eller Windows-1252-fil vil indlæses, men accenttegn vil se forvanskede ud (f.eks. café bliver til café). UTF-16 med BOM ser fuldstændig ødelagt ud. Konvertér ikke-UTF-8-filer først: i terminalen, iconv -f WINDOWS-1252 -t UTF-8 input.csv > out.csv; i VS Code, brug "Reopen with Encoding" og derefter "Save with Encoding" til UTF-8. Pythons csv-modul og pandas tillader begge at angive kildens kodning ved læsning.
Hvor stor en CSV-fil kan jeg diffe?
Op til et par MB er fint og føles øjeblikkeligt. Forbi 10 MB begynder browseren at mærke det, og det meste af omkostningen er at rendere den fremhævede diff (ikke at beregne den). Til meget store eksporter (50 MB+) skal du først filtrere begge filer ned til de kolonner eller rækker, du faktisk bekymrer dig om. csvcut og csvgrep fra csvkit, jq til JSON-konverteret CSV, eller en hurtig awk/grep er alle fine forberedelser. Indsæt derefter den trimmede del her.
Privatliv og hvordan det virker
Din CSV forlader aldrig din browser. Læseren, diffen og renderingen kører alle på din maskine, lokalt. Ingen analytics på dit input, ingen logs, ingen "hjælpsom" tur ud til skyen. For at tjekke, åbn DevTools, skift til Network-fanen og hold øje. Der er ingen udgående anmodninger, når du sammenligner. Formatreferencen er RFC 4180, og Pythons dokumentation til csv-modulet er den reference, vi krydstjekker parsings-grænsetilfælde mod.