Diff CSV: porównaj dwa pliki CSV online
Wklej lub wczytaj dwa pliki CSV i zobacz zmienione wiersze, ceny i pola obok siebie. Działa w przeglądarce, bez rejestracji, bez przesyłania.
Czym jest narzędzie diff CSV?
Darmowe narzędzie w przeglądarce do porównywania dwóch plików CSV. Wklej wczorajszy eksport od dostawcy po lewej, dzisiejszy po prawej, a zmienione komórki rozjaśniają się. Nic nie opuszcza twojej maszyny. Bez konta, bez przesyłania, bez limitów.
Sam diff działa na poziomie znaków, z pasem semantycznego post-przetwarzania, który ściąga wyróżnienia na całą wartość pola, zamiast rozsiewać je między przecinkami. Gramatyka, którą przyjmuje to narzędzie, to faktyczna specyfikacja CSV, RFC 4180: pola rozdzielone przecinkami, opcjonalne cudzysłowy, podwojone cudzysłowy do escapowania literalnego cudzysłowu, końce linii CRLF.
Jeśli kiedykolwiek otworzyłeś dwa cenniki dostawcy po 8 000 wierszy w Excelu, przewijałeś kolumna po kolumnie szukając SKU, którego cena drgnęła, i dałeś sobie spokój, to narzędzie doprowadzi cię do zmiany w sekundy. Do dowolnej prozy użyj naszego narzędzia diff tekstu. Dla danych ustrukturyzowanych ze stabilnymi kluczami diff JSON radzi sobie ze zmianą kolejności obiektów dużo lepiej niż CSV. Diff XML jest właściwym wyborem dla starych eksportów danych ze starszych ERP-ów.
Jak naprawdę działa diff
Porównanie jest wiersz po wierszu, świadome znaków. Wstawienia pojawiają się na zielono po prawej, usunięcia na czerwono po lewej. Pasaż w trybie wiersza utrzymuje rozsądną wydajność na plikach 5 MB, a następnie dopracowanie w trybie znaków na zmienionych wierszach wydobywa dokładne pole, które się przesunęło. W przypadku większości eksportów z arkuszy kalkulacyjnych jest to szybsze i czystsze niż uruchamianie diff w terminalu.
Bądźmy szczerzy co do tego, czym to nie jest. To diff tekstowy, nie prawdziwe porównanie świadome kluczy wierszy. Jeśli zmienisz kolejność wierszy, sortując po innej kolumnie, każda linia będzie wyglądać na zmienioną, mimo że dane bazowe są identyczne. Przy zmianie kolejności kolumn to samo. Nie ma tu pojęcia klucza głównego, takiego, jakie daje csvjoin z csvkit czy merge z pandas po SKU. Posortuj oba pliki tak samo przed wklejeniem albo użyj jednego z tamtych narzędzi, gdy naprawdę potrzebujesz porównania na zbiorach.
Wiersz nagłówka jest dla tego narzędzia danymi. Linia 1 jest traktowana jak każda inna, co znaczy, że zmiana nazwy nagłówka pojawia się jako jednowierszowy diff na górze. Przy przeglądzie dryfu schematu zwykle właśnie tego oczekujesz. Jeśli interesują cię tylko wiersze treści, usuń nagłówek z obu stron przed wklejeniem. Sam format CSV, w tym konwencje nagłówka, jest opisany w artykule wprowadzającym do CSV i w RFC 7111, który definiuje fragmenty URI do wybierania zakresów komórek wewnątrz zasobu CSV.
Jak porównać pliki CSV w trzech krokach
Dwa panele tekstu, jeden diff. Bez rejestracji, bez przesyłania, bez wyprawy do serwera.
- 1
Wklej lub wczytaj swój CSV
Wklej starszy CSV po lewej, a nowszy po prawej. Albo kliknij Wczytaj po którejkolwiek ze stron, aby wczytać plik .csv, .tsv lub .txt wprost z dysku. Przycisk Przykład wypełnia oba panele małym cennikiem produktów, żebyś najpierw zobaczył narzędzie w akcji.
- 2
W razie potrzeby ujednolić końce linii
Excel zapisuje CSV z CRLF (\r\n) na Windows; narzędzia takie jak csv.writer z Pythona albo unixowy potok shellowy często zapisują LF (\n). Jeśli jedna strona ma CRLF, a druga LF, każda linia będzie wyglądać na zmienioną. Przed wklejeniem otwórz oba w tym samym edytorze (lub przepuść przez dos2unix), żeby końce się zgadzały. UTF-8 BOM na początku CSV zapisanego przez Excel to drugi klasyczny sprawca; usuń go, jeśli drugi plik go nie ma.
- 3
Czytaj diff
Usunięcia są wyróżnione na czerwono po lewej, wstawienia na zielono po prawej. Przewijaj jedną stronę, druga podąża. Szukaj zmienionych cen, nowych wierszy dodanych na końcu i adresów e-mail poprawionych w środku listy. Zmiany nagłówka pojawiają się jako jednowierszowy diff w linii 1.
Kiedy diff CSV jest właściwym narzędziem
Uzgadnianie CSV inwentarza dostawcy z twoim ostatnim eksportem
Dostawca przesyła świeży cennik co tydzień. Wrzuć plik z zeszłego tygodnia do lewego panelu, ten z tego tygodnia do prawego, a ruchy cen na poziomie SKU rzucają się w oczy bez przewijania 4 000 wierszy w Excelu w pogoni za tym, która komórka pożółkła. Zrobienie tego w Excelu z VLOOKUP przeciw drugiemu arkuszowi jest wykonalne, ale wolne; diff jest szybszy, gdy potrzebujesz tylko szybkiej weryfikacji przed wgraniem nowych cen do sklepu.
Porównywanie eksportu z bazy danych z oczyszczoną kopią dla partnera
Przed wysłaniem zrzutu klientów do partnera redagujesz PII: e-mail staje się [email protected], telefon jest maskowany, pełne imiona i nazwiska skracane do inicjału. Zrób diff eksportu źródłowego z oczyszczoną kopią i potwierdź, że tylko zredagowane kolumny się zmieniły. Jeśli niespodziewanie pojawi się w diffie kolumna billing_address, twój skrypt redagujący przeoczył pole, a ty łapiesz je, zanim plik opuści laptopa.
Audyt feedu produktowego przed wgraniem do katalogu sprzedawcy
Google Merchant Center, Facebook Catalog i większość marketplace'ów łykają feed CSV (lub TSV). Po tym, jak twój CMS przegeneruje feed, zrób diff wobec znanej dobrej kopii z wczorajszego wieczora, żeby wyłapać regex, który zdjął końcowe zera z price, kolumnę dostępności, która z powodu błędu w IF() przeskoczyła w każdym wierszu z in_stock na out_of_stock, albo nowe pole GTIN, które twój zespół dodał, nikomu nie mówiąc.
Diffowanie dwóch eksportów CSV z Salesforce lub HubSpot
Gdy ktoś z sales ops pyta "które kontakty zmieniły się od zeszłego tygodnia?", wyeksportuj ten sam raport dwa razy (wtedy i teraz) i zrób diff dwóch plików. CSV nie będzie domyślnie posortowany po ID rekordu, więc najpierw posortuj obie strony po kolumnie ID; w przeciwnym razie każdy wiersz wygląda na pomieszany. Po posortowaniu prawdziwe zmiany (status leada przeszedł z MQL na SQL, e-mail poprawiony po bouncie) wychodzą wyraźnie.
Porównywanie wyniku pipeline'u z wczorajszym
Nocny job ETL zapisuje CSV do S3. Liczba wierszy dzisiaj jest podejrzanie różna od wczorajszej. Pobierz oba pliki, zdiffuj je, a znajdziesz dryf schematu: w środku tabeli pojawiła się nowa kolumna, bo upstreamowe API dodało pole, co przesunęło każdą komórkę poniżej o jedno miejsce. Diff wyłapuje zmianę strukturalną natychmiast, podczas gdy sama kontrola liczby wierszy powiedziałaby tylko, że coś jest nie tak.
Przegląd CSV z wynikami testu A/B od zespołu statystyk
Twój data scientist przesyła CSV z wynikami eksperymentu. Po metodologicznej poprawce uruchamiają analizę ponownie. Zrób diff v1 wobec v2: zmieniły się tylko kolumny statystyk testu, czy ruszyły także liczniki przypisań (co oznaczałoby, że definicja kohorty się przesunęła)? Uczciwy diff wyników analizy jest najtańszą weryfikacją przed wypuszczeniem funkcji opartej na wyniku.
Krótka referencja CSV
Krótka ściąga dla przypadków brzegowych parsera, które to narzędzie wyciąga najczęściej. Referencją gramatyczną jest RFC 4180 plus to, co prawdziwe narzędzia arkuszowe naprawdę produkują.
| Topic | What this tool does |
|---|
| Cudzysłowy zgodnie z RFC 4180 | Pola zawierające przecinki, cudzysłowy lub znaki nowej linii muszą być zamknięte w cudzysłowach. "Widget, small" jest jednym polem. Zwykłe wartości jak 4.99 nie wymagają cudzysłowów. Zobacz RFC 4180. |
|---|
| Escapowane cudzysłowy | Literalny " wewnątrz pola w cudzysłowach jest escapowany przez podwojenie. "He said ""hi""" to wartość He said "hi". Escape backslashem nie jest standardowym CSV, choć niektóre narzędzia go akceptują. |
|---|
| Wbudowane znaki nowej linii | Znaki nowej linii są dozwolone wewnątrz pola w cudzysłowach zgodnie z RFC 4180. Adres wielowierszowy w pojedynczej komórce to poprawny CSV. Diff traktuje każdą fizyczną linię jako jednostkę, więc pole zawierające nową linię może pokazać zmiany w linii owijającej. |
|---|
| Końce linii (CRLF vs LF) | RFC 4180 mówi CRLF (\r\n). Excel produkuje CRLF. Większość narzędzi unixowych produkuje LF. Mieszanie obu między panelami sprawia, że każda linia wygląda na zmienioną. Przed diffowaniem ujednolic końce. |
|---|
| BOM (UTF-8) | CSV-y zapisane przez Excel często zaczynają się od BOM UTF-8 (EF BB BF). FAQ Unicode BOM oznacza go jako opcjonalny i niepotrzebny dla UTF-8. Niezgodny BOM między dwoma plikami daje fantomowy diff w wierszu 1. |
|---|
| Dialekty separatorów | Przecinek to wartość domyślna; europejskie eksporty Excela używają średnika (;), bo w wielu lokalizacjach przecinek jest separatorem dziesiętnym. TSV (rozdzielone tabulatorami) to popularny wariant; zobacz tło TSV. Oba pliki muszą używać tego samego separatora, żeby diff miał sens. |
|---|
| Wiersze nagłówka | To narzędzie traktuje wiersz 1 jako dane. Zmiana nazwy kolumny pojawia się jako jednowierszowy diff na górze. Jeśli chcesz porównywać tylko wiersze treści, usuń nagłówek z obu paneli przed wklejeniem. Większość parserów (csv.DictReader z Pythona, pandas) traktuje wiersz 1 jako nagłówek umownie, ale sam format pliku tego nie wymaga. |
|---|
| Kodowanie | Tylko UTF-8 przez FileReader w przeglądarce. Latin-1 (ISO-8859-1) i Windows-1252 wczytają się, ale znaki z akcentami będą zniekształcone. Przekonwertuj iconv-iem albo "Save with Encoding" w VS Code przed wklejeniem. |
|---|
Diff CSV: najczęstsze pytania
Czy zmiana kolejności wierszy lub kolumn w CSV da zaszumiony diff?
Tak: silnik porównuje znaki wiersz po wierszu, więc zmiana kolejności wierszy lub kolumn pokaże się jako różnice nawet wtedy, gdy dane bazowe są identyczne. To diff tekstowy z kilkoma świadomymi CSV pomocami w czytaniu. Nie ma dopasowywania po kluczu wiersza, świadomości zmiany kolejności kolumn ani semantycznego rozumienia typów. Dla takiego poziomu porównania użyj narzędzia jak csvkit, pandas z merge na kluczu głównym albo wczytaj oba pliki do SQLite i wykonaj zapytanie EXCEPT. W codziennym porównywaniu arkuszy to narzędzie pokrywa większość potrzeb.
Jak radzić sobie z końcami linii CRLF z Windowsa kontra LF z Uniksa?
Excel zapisuje CSV z CRLF (\r\n), csv.writer Pythona zazwyczaj zapisuje LF (\n), a potok shellowy może produkować jedno albo drugie w zależności od flag. Jeśli jeden panel jest CRLF, a drugi LF, diff widzi różnicę w każdej linii. Naprawa polega na znormalizowaniu obu stron przed wklejeniem: otwórz je w tym samym edytorze i zapisz z jednym końcem linii, albo przepuść jedną przez dos2unix lub unix2dos. RFC 4180 nakazuje CRLF, ale realne pliki CSV używają obu.
Czy narzędzie obsługuje zmianę kolejności kolumn?
Nie. To diff tekstowy wiersz po wierszu. Jeśli wiersz 1 ma kolumny w kolejności sku,name,price po lewej i name,sku,price po prawej, każda komórka w każdym wierszu będzie wyglądać na zmienioną, bo diff widzi surowy tekst, a nie model kolumn. To samo dotyczy sortowania obu plików po różnych kolumnach. Przed diffowaniem ułóż kolumny i wiersze tak, żeby się pokrywały, albo sięgnij po narzędzie świadome kluczy, jak csvjoin z csvkit czy merge z pandas, gdy model kolumn naprawdę ma znaczenie.
Jak narzędzie obsługuje UTF-8 BOM, który dodaje Excel?
Excel pod Windowsem często zapisuje na początku CSV znacznik kolejności bajtów UTF-8 (bajty EF BB BF), mimo że FAQ Unicode BOM mówi, iż jest on niepotrzebny dla UTF-8. Jeśli jeden z twoich plików ma BOM, a drugi nie, zobaczysz fantomowy diff jednego znaku w wierszu 1, kolumnie 1. Otwórz plik w porządnym edytorze tekstu (VS Code, Notepad++, Sublime) i zapisz ponownie bez BOM, albo ręcznie usuń pierwsze trzy bajty przed wklejeniem.
Jakie kodowania akceptuje narzędzie?
UTF-8 to jedyne kodowanie, które ścieżka FileReadera tutaj poprawnie dekoduje. Plik Latin-1 lub Windows-1252 wczyta się, ale znaki z akcentami będą wyglądać dziwnie (np. café staje się café). UTF-16 z BOM wygląda na zupełnie zepsuty. Najpierw przekonwertuj pliki nie-UTF-8: w terminalu iconv -f WINDOWS-1252 -t UTF-8 input.csv > out.csv; w VS Code użyj "Reopen with Encoding", a potem "Save with Encoding" do UTF-8. Moduł csv Pythona i pandas pozwalają wskazać kodowanie źródłowe przy odczycie.
Jak duży CSV mogę zdiffować?
Do kilku MB jest w porządku i odczuwa się to natychmiast. Powyżej 10 MB przeglądarka zaczyna to czuć, a większość kosztu to renderowanie wyróżnionego diffa (a nie obliczanie). Przy bardzo dużych eksportach (50 MB+) najpierw przefiltruj oba pliki do tych kolumn lub wierszy, na których naprawdę ci zależy. csvcut i csvgrep z csvkit, jq dla CSV przekonwertowanego do JSON-a albo szybki awk/grep, wszystko nadaje się jako wstępny przebieg. Potem wklej tutaj przyciętą paczkę.
Prywatność i jak to działa
Twój CSV nigdy nie opuszcza przeglądarki. Czytnik, diff i renderowanie działają w całości na twojej maszynie, lokalnie. Bez analityki na twoich danych, bez logów, bez "pomocnej" rundy do chmury. Żeby to sprawdzić, otwórz DevTools, przejdź na zakładkę Network i obserwuj. Podczas porównywania nie ma żadnych żądań wychodzących. Referencją formatu jest RFC 4180, a dokumentacja modułu csv Pythona to referencja, z którą sprawdzamy krzyżowo przypadki brzegowe parsera.