CSV差異比較

比較兩個CSV檔案,即時檢視新增的行、刪除的行以及發生變化的單元格。可指定任意列作為行的識別鍵進行匹配,並列顯示變更前後的值,即使兩個CSV的列結構不同也能比較。所有處理均在瀏覽器內完成。

什麼是CSV差異比較

CSV差異比較是一款以列(欄位)和行為單位,自動核對兩份CSV(或TSV)資料,找出「新增的行」「被刪除的行」以及「數值有變動的儲存格」的工具。文字編輯器常見的逐行比對(例如Git的diff功能)只能判斷整行是否新增或刪除,而本工具會先依識別鍵(相當於ID或主鍵的欄位)將兩邊的行配對起來,再逐一比較每個儲存格,因此能精確標示出同一行當中「究竟是哪一欄的值改變了」。

輸入的CSV完全在瀏覽器內以JavaScript處理,不會傳送到任何伺服器。因此像是會員資料或銷售資料等不希望外流的內容,也能安心拿來比較。此外,即使兩份CSV的欄位順序或欄位數量不同,本工具也會依表頭名稱自動對應後再進行比較,這也是它的一大特色。

CSV差異比較的使用方式

  1. 準備比較源(A)與比較目標(B)的CSV 在左側欄位貼上更新前的CSV,右側欄位貼上更新後的CSV,或是點選「載入檔案」上傳CSV/TSV檔案。
  2. 選擇分隔符 依資料格式將「分隔符」設定為逗號(CSV)或製表符(TSV)。
  3. 指定是否有表頭行 若第一行是欄位名稱,請勾選「將首行作為表頭」;若沒有表頭,取消勾選後系統會自動以col1、col2……的序號作為欄位名稱。
  4. 選擇鍵列 從下拉選單中選出用來識別每一行的欄位(相當於ID或主鍵)。A、B兩邊的行會依此欄位的值進行配對。
  5. 確認差異結果 「被刪除的行」「新增的行」「發生變化的行」會自動列出。發生變化的行會逐一儲存格並列顯示變更前後的值。

用好本工具的小技巧

  • 預設使用第1列作為識別行的鍵列,但如果資料中有ID或主鍵列,建議改用該列——即使行的順序或數量發生變化,也能正確匹配對應的行。
  • 如果兩個CSV都沒有表頭行,請取消勾選"將首行作為表頭",系統會自動使用col1、col2……這樣的序號列名進行比較。
  • "發生變化的行"部分會逐列比較鍵值相同的行,並僅列出存在差異的列,以"變更前→變更後"的形式展示。
  • TSV(製表符分隔)檔案同樣支援,只需將分隔符切換為"製表符",直接貼上資料即可。
  • 除了上傳檔案,也可以直接貼上從Excel或電子表格中複製的區域,比較效果相同。

CSV差異比較的應用場景

主資料更新前後的核對

將商品主資料或客戶主資料匯出成CSV,比較更新作業前後的內容,可以檢查是否混入了非預期的變動。

系統遷移時的資料核對

比較新舊系統各自匯出的CSV,確認遷移過程中資料是否有缺漏或重複,適合用於資料核對作業。

批次處理結果的驗證

在日批次或月批次執行前後將資料表匯出成CSV,可用來驗證是否只有預期的行被新增或更新。

試算表變更紀錄的檢查

貼上從Excel或試算表複製的表格內容進行比較,能快速找出多人協作編輯時他人變更過的地方。

API或爬蟲結果的差異監控

將定期從API取得的資料轉成CSV並逐日比較,可以追蹤價格或庫存數量等特定數值何時發生變化。

CSV差異比較用語集

鍵列
用來唯一識別每一行的欄位,通常指定為ID或主鍵所在的欄位。即使行的排列順序改變,指定鍵列後仍能正確配對出對應的行。
表頭行
CSV第一行用來標示各欄位名稱的行。啟用「將首行作為表頭」後,這一行會被排除在差異比較之外,改為當作欄位名稱使用。
分隔符
CSV中用來區隔各儲存格數值的符號。標準做法是使用逗號,但以製表符分隔的TSV也能用相同機制進行比較。
合併欄位清單
將比較源(A)與比較目標(B)的表頭整合而成的欄位名稱清單。以A的欄位順序為基準,再把B獨有的欄位加到最後。只存在於其中一方的欄位,比較時另一方會視為空值。
變更儲存格
鍵值相同的兩行之間,逐欄比較後數值不一致的儲存格。畫面上會並列顯示變更前(A)與變更後(B)的數值。
未變化的行
同時存在於比較源與比較目標,且所有欄位的數值都完全一致的行。這類行不會列在差異清單中,只會計入摘要的件數統計。

常見問題

常用於比較匯出的主資料在更新前後的差異,或驗證系統遷移前後資料的一致性。即使CSV行數很多,也能立即提取出新增、刪除、變更的行,比逐行肉眼核對能節省大量時間。

可以。行的匹配是基於所選"鍵列"的值進行的,因此即使兩個檔案中行的順序不同,只要鍵值相同的行仍會被正確地對應比較。如果同一個鍵值出現多次,則以後出現的行為準。

可以。比較是基於由兩個表頭合併而成的列列表進行的,因此即使列的順序不同,也能按列名正確對應。僅存在於一方的列,在計算差異時會將另一方的值視為空。

不會。所有比較處理都完全在瀏覽器內的JavaScript中完成,輸入或上傳的CSV內容不會被發送到任何伺服器,即使是包含敏感資訊的資料也可以放心使用。

會的。單元格的值是按字串嚴格比較的,因此大小寫的差異,以及前後多餘的空格,都會被判定為"存在變更"。如果希望忽略這類格式差異,建議提前統一資料格式。
工具君

閒話 ― 為什麼僅靠文本diff不足以比較CSV檔案

比較兩個CSV檔案,傳統做法通常是在Excel中並排肉眼核對兩個工作表,或使用Git等工具進行基於行的文本diff。但由於CSV的每一行都用逗號並排包含多個值,基於行的diff只能告訴你"這一行變了",卻無法一眼看出具體是哪一列發生了變化。本工具之所以按單元格級別定位變更之處,正是為了彌補這一缺陷。

在企業系統領域,將資料庫表匯出為CSV進行比較——通常稱為"資料核對"——是一項常見工作。在確認遷移前後資料是否完全一致,或核實月度批處理結果是否符合預期時,涉及的行數往往達到數千甚至數萬行。在這種規模下,按鍵列進行機械化核對就變得不可或缺。

Git等版本控制系統所使用的diff演算法(如Myers差異演算法)擅長檢測行級別的新增與刪除,但對於CSV這種"同一行只有部分列的值發生變化"的資料,未必是最合適的方案。本工具採用的先按鍵匹配行、再逐列比較單元格的方式,是專為表格型資料差異檢測而設計的方法。