CSV差异比较

比较两个CSV文件,即时查看新增的行、删除的行以及发生变化的单元格。可指定任意列作为行的识别键进行匹配,并列显示变更前后的值,即使两个CSV的列结构不同也能比较。所有处理均在浏览器内完成。

使用提示

  • 默认使用第1列作为识别行的键列,但如果数据中有ID或主键列,建议改用该列——即使行的顺序或数量发生变化,也能正确匹配对应的行。
  • 如果两个CSV都没有表头行,请取消勾选"将首行作为表头",系统会自动使用col1、col2……这样的序号列名进行比较。
  • "发生变化的行"部分会逐列比较键值相同的行,并仅列出存在差异的列,以"变更前→变更后"的形式展示。
  • TSV(制表符分隔)文件同样支持,只需将分隔符切换为"制表符",直接粘贴数据即可。
  • 除了上传文件,也可以直接粘贴从Excel或电子表格中复制的区域,比较效果相同。

常见问题

常用于比较导出的主数据在更新前后的差异,或验证系统迁移前后数据的一致性。即使CSV行数很多,也能立即提取出新增、删除、变更的行,比逐行肉眼核对能节省大量时间。

可以。行的匹配是基于所选"键列"的值进行的,因此即使两个文件中行的顺序不同,只要键值相同的行仍会被正确地对应比较。如果同一个键值出现多次,则以后出现的行为准。

可以。比较是基于由两个表头合并而成的列列表进行的,因此即使列的顺序不同,也能按列名正确对应。仅存在于一方的列,在计算差异时会将另一方的值视为空。

不会。所有比较处理都完全在浏览器内的JavaScript中完成,输入或上传的CSV内容不会被发送到任何服务器,即使是包含敏感信息的数据也可以放心使用。

会的。单元格的值是按字符串严格比较的,因此大小写的差异,以及前后多余的空格,都会被判定为"存在变更"。如果希望忽略这类格式差异,建议提前统一数据格式。
ツールくん

闲话 ― 为什么仅靠文本diff不足以比较CSV文件

比较两个CSV文件,传统做法通常是在Excel中并排肉眼核对两个工作表,或使用Git等工具进行基于行的文本diff。但由于CSV的每一行都用逗号并排包含多个值,基于行的diff只能告诉你"这一行变了",却无法一眼看出具体是哪一列发生了变化。本工具之所以按单元格级别定位变更之处,正是为了弥补这一缺陷。

在企业系统领域,将数据库表导出为CSV进行比较——通常称为"数据核对"——是一项常见工作。在确认迁移前后数据是否完全一致,或核实月度批处理结果是否符合预期时,涉及的行数往往达到数千甚至数万行。在这种规模下,按键列进行机械化核对就变得不可或缺。

Git等版本控制系统所使用的diff算法(如Myers差异算法)擅长检测行级别的新增与删除,但对于CSV这种"同一行只有部分列的值发生变化"的数据,未必是最合适的方案。本工具采用的先按键匹配行、再逐列比较单元格的方式,是专为表格型数据差异检测而设计的方法。