CSV差异比较
比较两个CSV文件,即时查看新增的行、删除的行以及发生变化的单元格。可指定任意列作为行的识别键进行匹配,并列显示变更前后的值,即使两个CSV的列结构不同也能比较。所有处理均在浏览器内完成。
什么是CSV差异比较
CSV差异比较是一款按列和按行对两份CSV(或TSV)数据进行比对,自动找出"新增的行""删除的行"以及"值发生变化的单元格"的工具。文本编辑器的按行比较(例如Git的diff)通常只能判断整行是新增还是删除,而本工具会先根据识别键(相当于ID或主键的列)将两边的行一一对应,再逐列进行比较,因此能够精确定位到"同一行中究竟是哪一列的值变了"。
输入的CSV数据仅在浏览器内通过JavaScript处理,不会发送到任何服务器。因此,即使是会员信息、销售数据等不便对外公开的内容,也可以放心比较。此外,即便两份CSV的列顺序或列数不同,本工具也会以表头名称为基准自动对应后再进行比较,无需事先手动调整两份数据的列结构。
CSV差异比较的使用方法
- 准备比较源(A)和比较目标(B)的CSV 将更新前的CSV粘贴到左侧输入框,更新后的CSV粘贴到右侧输入框,也可以通过"选择文件"上传CSV或TSV文件。
- 选择分隔符 根据数据是逗号分隔的CSV还是制表符分隔的TSV,将"分隔符"设置为"逗号"或"制表符"。
- 指定是否包含表头行 如果第一行是列名表头,请勾选"将首行作为表头";若没有表头,取消勾选后系统会自动分配col1、col2等序号列名。
- 选择键列 从下拉菜单中选择用于识别行的列(相当于ID或主键的列),A和B两边的行将根据该列的值进行对应匹配。
- 查看比较结果 "删除的行""新增的行""变更的行"会自动列出。对于变更的行,会按单元格列出变更前和变更后的值。
用好本工具的小技巧
- 默认使用第1列作为识别行的键列,但如果数据中有ID或主键列,建议改用该列——即使行的顺序或数量发生变化,也能正确匹配对应的行。
- 如果两个CSV都没有表头行,请取消勾选"将首行作为表头",系统会自动使用col1、col2……这样的序号列名进行比较。
- "发生变化的行"部分会逐列比较键值相同的行,并仅列出存在差异的列,以"变更前→变更后"的形式展示。
- TSV(制表符分隔)文件同样支持,只需将分隔符切换为"制表符",直接粘贴数据即可。
- 除了上传文件,也可以直接粘贴从Excel或电子表格中复制的区域,比较效果相同。
CSV差异比较的应用场景
主数据更新前后的核对
将商品主数据或客户主数据导出为CSV,在更新作业前后进行比较,可以检查是否混入了不符合预期的改动。
系统迁移时的数据核对
将新旧系统分别导出的CSV进行比较,可用于确认迁移过程中数据是否存在遗漏或重复的"数据核对"工作。
批处理结果的验证
在日常或月度批处理执行前后分别导出数据表为CSV,验证是否仅有预期中的行被新增或更新。
电子表格变更记录的检查
粘贴从Excel或电子表格中复制的表格内容进行比较,可以快速找出多人协作编辑时被改动的部分。
API或抓取结果的差异监控
将定期从API获取的数据导出为CSV并逐日比较,可以追踪价格、库存数量等特定数值的变化时间点,及时发现异常波动。
数据库表结构变更前的备份比对
在对数据库表进行结构调整或批量修改前后分别导出CSV快照,比较结果可以作为变更是否符合预期的证据留存下来。
CSV差异比较术语表
- 键列
- 用于唯一识别每一行的列,通常指定为ID或主键所在的列。指定后,即使行的顺序发生变化,也能正确匹配对应的行。
- 表头行
- CSV第一行中列出各列名称的行。启用"将首行作为表头"后,该行不参与差异比较,而是被当作列名使用。
- 分隔符
- CSV中用于分隔各单元格值的符号,默认是逗号,但以制表符分隔的TSV也可以用同样的方式进行比较。
- 合并列列表
- 将比较源(A)和比较目标(B)的表头合并而成的列名列表,以A的列顺序为基准,并将B独有的列追加到末尾。仅存在于一方的列,在比较时会将另一方的值视为空。
- 变更单元格
- 在键值相同的行之间逐列比较后,值不一致的单元格,会并列显示变更前(A)和变更后(B)的值。
- 未变化行
- 在比较源和比较目标中都存在,且所有列的值完全一致的行,不会出现在差异列表中,仅计入摘要中的数量统计。
- 数据核对
- 系统迁移或批处理执行后,比较新旧数据是否一致的检查工作。将双方数据导出为CSV并按键列比较,可以高效完成这项通常需要逐行核对的任务。
常见问题
闲话 ― 为什么仅靠文本diff不足以比较CSV文件
比较两个CSV文件,传统做法通常是在Excel中并排肉眼核对两个工作表,或使用Git等工具进行基于行的文本diff。但由于CSV的每一行都用逗号并排包含多个值,基于行的diff只能告诉你"这一行变了",却无法一眼看出具体是哪一列发生了变化。本工具之所以按单元格级别定位变更之处,正是为了弥补这一缺陷。
在企业系统领域,将数据库表导出为CSV进行比较——通常称为"数据核对"——是一项常见工作。在确认迁移前后数据是否完全一致,或核实月度批处理结果是否符合预期时,涉及的行数往往达到数千甚至数万行。在这种规模下,按键列进行机械化核对就变得不可或缺。
Git等版本控制系统所使用的diff算法(如Myers差异算法)擅长检测行级别的新增与删除,但对于CSV这种"同一行只有部分列的值发生变化"的数据,未必是最合适的方案。本工具采用的先按键匹配行、再逐列比较单元格的方式,是专为表格型数据差异检测而设计的方法。