Orijinal CSV
Değiştirilmiş CSV

CSV diff: iki CSV dosyasını çevrimiçi karşılaştırın

İki CSV dosyasını yapıştırın veya yükleyin; değişen satırları, fiyatları ve alanları yan yana görün. Tarayıcınızda çalışır, kayıt yok, yükleme yok.

CSV diff aracı nedir?

İki CSV dosyasını karşılaştırmak için ücretsiz, tarayıcı içi bir araç. Dünkü tedarikçi dışa aktarımını sola, bugünkünü sağa yapıştırın; değişen hücreler aydınlanır. Hiçbir şey makinenizden çıkmaz. Hesap yok, yükleme yok, kota yok.

Diff'in kendisi karakter düzeyinde çalışır ve anlamsal bir son işleme adımı vurguları virgüller arasında dağıtmak yerine alan değerinin tamamına çeker. Bu aracın varsaydığı dilbilgisi fiilen geçerli CSV spesifikasyonu, RFC 4180'dir: virgülle ayrılmış alanlar, isteğe bağlı çift tırnak, harfi harfine bir tırnağı kaçırmak için ikiye katlanmış tırnaklar, CRLF satır sonları.

Excel'de iki adet 8.000 satırlık tedarikçi fiyat listesi açıp, fiyatı değişen SKU'yu bulmak için sütun sütun kaydırıp pes ettiyseniz, bu sizi değişikliğe saniyeler içinde götüren araçtır. Serbest düz metin için metin diff aracımızı kullanın. Sabit anahtarlı yapılandırılmış veri için JSON diff, nesne yeniden sıralamasını CSV'nin başarabileceğinden çok daha iyi yönetir. Daha eski ERP'lerden gelen eski veri dışa aktarımları için XML diff doğru tercihtir.

Diff'in gerçekte nasıl çalıştığı

Karşılaştırma satır satır, karakter farkındalığıyla yapılır. Eklemeler sağda yeşil, silmeler solda kırmızı görünür. Satır modu geçişi 5 MB'lık dosyalarda performansı makul tutar; ardından değişen satırlardaki karakter modu rafinasyonu, hareket eden kesin alanı yüzeye çıkarır. Çoğu elektronik tablo dışa aktarımı için bu, terminalde diff çalıştırmaktan daha hızlı ve daha temizdir.

Bunun ne olmadığı konusunda dürüst olalım. Bu, bir metin diff'idir; gerçekten satır anahtarlarının farkında olan bir karşılaştırma değildir. Farklı bir sütuna göre sıralayarak satırları yeniden düzenlerseniz, alttaki veri aynı olsa bile her satır değişmiş gibi görünür. Sütunları yeniden düzenlerseniz aynı şey olur. Burada csvkit'in csvjoin'inin ya da bir SKU üzerinde pandas merge'ünün size verdiği gibi bir birincil anahtar kavramı yoktur. Yapıştırmadan önce her iki dosyayı aynı şekilde sıralayın veya gerçekten küme tabanlı karşılaştırmaya ihtiyacınız varsa o araçlardan birini kullanın.

Başlık satırı bu araç için veridir. 1. satıra diğer her satır gibi davranılır; bu da, başlık yeniden adlandırmasının en üstte tek satırlık bir diff olarak göründüğü anlamına gelir. Şema kaymasını gözden geçirirken genellikle istediğiniz budur. Sadece gövde satırlarıyla ilgileniyorsanız, yapıştırmadan önce her iki taraftan başlığı çıkarın. CSV biçiminin kendisi, başlık kuralları dahil, CSV arka plan makalesinde ve bir CSV kaynağı içindeki hücre aralıklarını seçmek için URI parçalarını tanımlayan RFC 7111'de açıklanmıştır.

Üç adımda CSV dosyalarını karşılaştırma

İki metin paneli, bir diff. Kayıt yok, yükleme yok, sunucuya gidip gelme yok.

  1. 1

    CSV'nizi yapıştırın veya yükleyin

    Daha eski CSV'yi sola, daha yenisini sağa yapıştırın. Veya doğrudan diskten bir .csv, .tsv ya da .txt dosyası yüklemek için iki taraftan birinde Yükle'ye tıklayın. Örnek düğmesi, aracı önce iş başında görmeniz için her iki paneli küçük bir ürün fiyat listesiyle doldurur.

  2. 2

    Gerekirse satır sonlarını normalleştirin

    Excel, Windows'ta CSV'yi CRLF (\r\n) ile kaydeder; Python'un csv.writer'ı veya bir Unix shell pipeline'ı gibi araçlar genellikle LF (\n) yazar. Bir taraf CRLF, diğeri LF ise, her satır değişmiş gibi görünür. Yapıştırmadan önce her ikisini de aynı düzenleyicide açın (veya dos2unix'ten geçirin), böylece satır sonları örtüşür. Excel'in kaydettiği bir CSV'nin başındaki UTF-8 BOM diğer klasik suçludur; diğer dosyada yoksa onu kaldırın.

  3. 3

    Diff'i okuyun

    Silmeler solda kırmızı vurgu ile, eklemeler sağda yeşil vurgu ile görünür. Bir tarafı kaydırın, diğeri takip eder. Değişen fiyatları, en alta eklenen yeni satırları ve listenin ortasında düzeltilmiş e-posta adreslerini arayın. Başlık değişiklikleri 1. satırda tek satırlık bir diff olarak görünür.

CSV diff'in doğru araç olduğu durumlar

Bir tedarikçi envanter CSV'sini son dışa aktarımınızla mutabık kılma

Bir tedarikçi her hafta yeni bir fiyat listesi gönderir. Geçen haftaki dosyayı sol panele, bu haftakini sağa atın; SKU düzeyindeki fiyat hareketleri, hangi hücrenin sarıya dönüştüğünü kovalamak için Excel'de 4.000 satır kaydırmanıza gerek kalmadan göze çarpar. Bunu Excel'de ikinci bir sayfaya karşı VLOOKUP ile yapmak mümkün ama yavaş; yeni fiyatları mağazaya basmadan önce hızlı bir akıl sağlığı kontrolü yapmak istiyorsanız diff daha hızlıdır.

Bir veritabanı dışa aktarımını sterilize edilmiş bir partner kopyasıyla karşılaştırma

Bir partner'a müşteri dökümünü göndermeden önce PII'yi maskelersiniz: e-posta [email protected], telefon maskelenir, tam adlar baş harfe kısaltılır. Kaynak dışa aktarımı sterilize edilmiş kopyayla diff edin ve yalnızca maskelenen sütunların değiştiğini doğrulayın. Diff'te beklenmedik şekilde bir billing_address sütunu çıkarsa, maskeleme betiğiniz bir alanı atlamıştır ve dosya laptop'ınızdan çıkmadan önce yakalarsınız.

Bir merchant kataloğuna basmadan önce bir ürün beslemesini denetleme

Google Merchant Center, Facebook Catalog ve çoğu marketplace bir CSV (veya TSV) beslemesini yer. CMS'iniz beslemeyi yeniden ürettikten sonra, dünün bilinen iyi kopyasıyla diff alarak price'tan sondaki sıfırları çıkaran bir regex'i, bir IF() hatası nedeniyle her satırda in_stock'tan out_of_stock'a dönmüş bir kullanılabilirlik sütununu veya ekibinizin kimseye söylemeden eklediği yeni bir GTIN alanını yakalayın.

İki Salesforce veya HubSpot CSV dışa aktarımını diff etme

Bir satış operasyon görevlisi "geçen haftadan beri hangi kişiler değişti?" diye sorduğunda, aynı raporu iki kez (o zaman ve şimdi) dışa aktarın ve iki dosyayı diff edin. CSV varsayılan olarak kayıt ID'sine göre sıralanmış olmaz, bu yüzden önce her iki tarafı ID sütununa göre sıralayın; aksi halde her satır karışmış gibi görünür. Sıralandıktan sonra gerçek değişiklikler (bir lead durumunun MQL'den SQL'e geçmesi, bir bounce sonrası düzeltilmiş bir e-posta) net biçimde ortaya çıkar.

Pipeline çıktısını dünkiyle karşılaştırma

Gece çalışan bir ETL işi S3'e bir CSV yazar. Bugünkü satır sayısı dünden şüpheli derecede farklı. İki dosyayı çekin, diff alın; şema kaymasını bulursunuz: yukarı akış API'si bir alan eklediği için tablonun ortasında yeni bir sütun belirmiş, bu da aşağı akıştaki her hücreyi bir konum kaydırmıştır. Diff yapısal değişikliği anında yakalar; oysa tek başına satır sayısı kontrolü size yalnızca bir şeyin yolunda gitmediğini söylerdi.

İstatistik ekibinden gelen bir A/B testi sonuç CSV'sini gözden geçirme

Veri bilimciniz deney sonuçlarını içeren bir CSV teslim eder. Metodolojide bir ince ayardan sonra analizi yeniden çalıştırırlar. v1 ile v2'yi diff edin: yalnızca test istatistiği sütunları mı değişti, yoksa atama sayıları da mı oynadı (bu, kohort tanımının hareket ettiği anlamına gelirdi)? Sonuca dayalı bir özelliği yayına almadan önce, analiz çıktılarını dürüstçe diff etmek en ucuz akıl sağlığı kontrolüdür.

CSV hızlı referans

Bu aracın en sık ortaya çıkardığı parsing sınır durumları için kısa bir kopya kağıdı. Dilbilgisi referansı RFC 4180 ve gerçek elektronik tablo araçlarının fiilen ürettiği şeydir.

TopicWhat this tool does
RFC 4180'a göre tırnakVirgül, çift tırnak veya satır sonu içeren alanlar çift tırnak içine alınmalıdır. "Widget, small" tek bir alandır. 4.99 gibi düz değerlerin tırnağa ihtiyacı yoktur. Bkz. RFC 4180.
Kaçırılmış çift tırnaklarTırnaklı bir alanın içindeki harfi harfine bir " ikiye katlanarak kaçırılır. "He said ""hi"""'nin değeri He said "hi"'dir. Bazı araçlar kabul etse de ters eğik çizgi ile kaçırma standart CSV değildir.
Gömülü satır sonlarıRFC 4180'a göre tırnaklı bir alanın içinde satır sonları izinlidir. Tek bir hücredeki çok satırlı bir adres geçerli CSV'dir. Diff her fiziksel satırı bir birim olarak ele alır, bu yüzden satır sonu içeren bir alan, sarmalayan satırda değişiklik gösterebilir.
Satır sonları (CRLF vs LF)RFC 4180 CRLF (\r\n) der. Excel CRLF üretir. Çoğu Unix aracı LF üretir. Sol ve sağ paneller arasında ikisini karıştırmak her satırı değişmiş gibi gösterir. Diff almadan önce satır sonlarını normalleştirin.
BOM (UTF-8)Excel'in kaydettiği CSV'ler genellikle bir UTF-8 BOM (EF BB BF) ile başlar. Unicode BOM SSS, UTF-8 için isteğe bağlı ve gereksiz olarak işaretler. İki dosya arasında uyuşmayan bir BOM, 1. satırda hayalet bir diff üretir.
Ayraç lehçeleriVirgül varsayılandır; birçok yerel ayarda ondalık ayırıcı virgül olduğu için Avrupa Excel dışa aktarımları noktalı virgül (;) kullanır. TSV (sekme ile ayrılmış) yaygın bir varyanttır; TSV arka planına bakın. Anlamlı bir diff için her iki dosyanın da aynı ayracı kullanması gerekir.
Başlık satırlarıBu araç 1. satırı veri olarak ele alır. Sütun yeniden adlandırma en üstte tek satırlık bir diff olarak görünür. Yalnızca gövde satırlarını karşılaştırmak istiyorsanız yapıştırmadan önce her iki panelden başlığı çıkarın. Çoğu parser (Python'un csv.DictReader'ı, pandas) 1. satırı uzlaşı gereği başlık olarak ele alır, ancak dosya formatı bunu zorunlu kılmaz.
KodlamaTarayıcı içi FileReader üzerinden yalnızca UTF-8. Latin-1 (ISO-8859-1) ve Windows-1252 yüklenir ama aksanlı karakterleri bozuk gösterir. Yapıştırmadan önce iconv ile veya VS Code'un "Save with Encoding" seçeneğiyle dönüştürün.

CSV diff: sık sorulan sorular

CSV satırlarını veya sütunlarını yeniden düzenlemek gürültülü bir diff üretir mi?

Evet: motor karakterleri satır satır karşılaştırır; bu yüzden satırları veya sütunları yeniden düzenlemek, alttaki veri aynı olsa bile fark olarak görünür. Bu, CSV-bilinçli birkaç okuma yardımcısı eklenmiş bir metin diff'idir. Satır anahtarı eşleşmesi, sütun yeniden sıralama farkındalığı veya türlerin anlamsal anlayışı yoktur. Bu seviyede karşılaştırma için csvkit gibi bir araç, birincil anahtar üzerinde merge yapan pandas veya iki dosyayı SQLite'a yükleyip bir EXCEPT sorgusu çalıştırın. Günlük elektronik tablo karşılaştırması için bu araç ihtiyacınızın çoğunu karşılar.

Windows CRLF ile Unix LF satır sonlarıyla nasıl baş edilir?

Excel CSV'yi CRLF (\r\n) ile yazar, Python'un csv.writer'ı tipik olarak LF (\n) yazar ve bir shell pipeline bayrağa göre her ikisini de üretebilir. Bir panel CRLF ve diğeri LF ise diff her satırda fark görür. Çözüm yapıştırmadan önce her iki tarafı normalleştirmektir: aynı düzenleyicide açıp tek satır sonuyla kaydedin veya birini dos2unix ya da unix2dos'tan geçirin. RFC 4180 CRLF'yi zorunlu kılar; ama gerçek dünya CSV dosyaları her ikisini de kullanır.

Araç sütun yeniden sıralamayı destekliyor mu?

Hayır. Bu satır satır bir metin diff'idir. 1. satırın sütunları solda sku,name,price sırasında ve sağda name,sku,price sırasındaysa, diff sütun modeli değil ham metin gördüğü için her satırdaki her hücre değişmiş gibi görünür. Aynısı iki dosyayı farklı sütunlara göre sıraladığınızda da geçerlidir. Diff almadan önce sütunları ve satırları eşleşecek şekilde yeniden düzenleyin veya sütun modeli gerçekten önemliyse csvkit'in csvjoin'i ya da pandas merge'ü gibi satır anahtarı bilen bir araca uzanın.

Araç Excel'in eklediği UTF-8 BOM'u nasıl ele alıyor?

Windows üzerindeki Excel, Unicode BOM SSS'sinin UTF-8 için gereksiz olduğunu söylemesine rağmen, bir CSV'nin başında sıkça bir UTF-8 byte order mark (EF BB BF baytları) yazar. Dosyalarınızdan birinde BOM varsa diğerinde yoksa, 1. satır 1. sütunda tek karakterlik bir hayalet diff görürsünüz. Dosyayı düzgün bir metin düzenleyicide (VS Code, Notepad++, Sublime) açın ve BOM olmadan yeniden kaydedin veya yapıştırmadan önce ilk üç baytı elle çıkarın.

Araç hangi kodlamaları kabul eder?

UTF-8, FileReader yolunun burada doğru biçimde çözdüğü tek kodlamadır. Latin-1 veya Windows-1252 dosyası yüklenir ama aksanlı karakterler bozuk görünür (örn. café yerine café). BOM'lu UTF-16 tamamen kırık görünür. UTF-8 olmayan dosyaları önce dönüştürün: terminalde iconv -f WINDOWS-1252 -t UTF-8 input.csv > out.csv; VS Code'da "Reopen with Encoding" sonra "Save with Encoding" ile UTF-8'e. Python'un csv modülü ve pandas, okuma sırasında kaynak kodlamayı belirtmenize izin verir.

Ne kadar büyük bir CSV dosyası diff edebilirim?

Birkaç MB'a kadar sorun yok ve anlık hissedilir. 10 MB'ı geçtikten sonra tarayıcı bunu hissetmeye başlar ve maliyetin çoğu vurgulanmış diff'i hesaplamak değil, render etmektir. Çok büyük dışa aktarımlarda (50 MB+) önce her iki dosyayı gerçekten önemsediğiniz sütun veya satırlara filtreleyin. csvkit'in csvcut'ı ve csvgrep'i, JSON'a çevrilmiş CSV için jq veya hızlı bir awk/grep, ön geçişler olarak iyi çalışır. Sonra kırpılmış dilimi buraya yapıştırın.

Gizlilik ve nasıl çalıştığı

CSV'niz hiçbir zaman tarayıcınızdan çıkmaz. Okuyucu, diff ve render işleminin tamamı makinenizde, yerel olarak çalışır. Girdinizde analitik yok, log yok, "yardımsever" bir bulut gidiş-dönüşü yok. Kontrol etmek için DevTools'u açın, Network sekmesine geçin ve izleyin. Karşılaştırma yaparken giden istek olmaz. Format referansı RFC 4180'dir ve parsing sınır durumlarını çapraz kontrol ettiğimiz referans Python'un csv modülü dokümantasyonudur.