跳到工具
ViewCSV
无需上传文件

对比 CSV 文件

原始文件
orders.csv· 示例数据15 行 · 8 列
更新后的文件
orders-updated.csv· 示例数据15 行 · 8 列
行的匹配方式
关键列
能在两个文件中标识同一行的列,比如订单号。
忽略的列
  • 行:新增 1,删除 1,修改 1,未变 13。修改的值:1。
  • 有 1 个关键值出现了不止一次(第一个:001043),重复项按出现顺序配对。
  • 修改001044原始第 4 行 更新后第 4 行
    quantity112
  • 删除001046原始第 6 行
  • 新增001099 更新后第 15 行

下载文件中每个修改的值占一行,另外列出新增和删除的行。

打开原始文件和更新后的文件,选择能标识一行的列(例如订单号或 SKU),差异会立即显示:只在更新后文件中出现的行为新增,只在原始文件中出现的行为删除,两边都有但值不同的行为修改,并显示每个值修改前后的内容。行在文件中的位置变化不算修改。结果可以下载为 CSV 报告,每个修改的单元格占一行。两个文件都在你的浏览器中对比,不会上传。

如何对比两个 CSV 文件

  1. 在第一个位置打开原始文件,在第二个位置打开更新后的文件。每个位置都有自己的导入设置(分隔符、表头和编码),所以分号分隔的导出也能与逗号分隔的文件对比。
  2. 选择按关键列匹配,并从两个文件共有的列中勾选一个或多个关键列。如果没有哪一列是唯一的,可以组合多列,例如 order_id 和 line。
  3. 按需设置比较选项,查看摘要和差异列表(可以只看新增、删除或修改),然后下载差异报告。

如果文件没有 ID 列,并且确定行的顺序相同,可以改为按行位置匹配:第 1 行与第 1 行比较,依此类推。但这样只要插入一行,后面的每一行都会显示为修改,所以只要有关键列,就请按关键列匹配。

比较选项

忽略大小写Desk Lamp 与 desk lamp 视为相等。对关键列和值都有效。
忽略多余空格比较前去除两端的空格,并把值内任意连续的空格、制表符或换行视为一个空格。对关键列同样有效。
数值容差当两个值都是数字时,只要相差不超过这个数(例如 0.01)就视为相等。计算采用精确的十进制运算,而不是浮点运算;容差为 0 时,45.0 和 45.00 视为同一个数。只有使用小数点、不带千分位分隔符的写法才算数字:1,000 仍是文本,而 1e3 会读作 1000。设置容差后,007 也会等于 7,因为两者都按数字读取。留空则按文本精确比较。
忽略的列完全不参与比较的列,例如 updated_at,或每次导出都会变化的时间戳。

只在一个文件中存在的列会列在摘要中,不参与比较。如果它们其实是改了名的同一列,请先用 重命名和调整 CSV 列顺序 改成相同的列名。

重复和空白的关键值

一个关键值应当只对应一行。如果不是这样,工具也不会隐瞒:摘要会统计重复的关键值并给出第一个,具有相同关键值的行按出现顺序配对。原始文件中第一个关键值为 1 的行与更新后文件中第一个关键值为 1 的行比较,第二个与第二个比较,任一边多出的行报告为删除或新增。

这种配对方式可能会把两个相同关键值的行互换位置报告为修改。如果摘要提到有重复的关键值,请继续添加关键列,直到每种组合都唯一。所有关键列都为空的行会单独统计,因为它们通常来自空行或损坏的导出。

如何阅读结果和报告

摘要给出新增、删除、修改和未变的行数,以及修改的单元格总数。列表先按原始文件的顺序显示差异,再列出只在更新后文件中存在的行。每一项都显示关键值以及在两个文件中的行号(不含表头,数据行从 1 开始计数)。页面上列出前 500 处差异;报告包含全部差异。

changeadded(新增)、removed(删除)或 changed(修改)。
关键列关键值。开启忽略大小写或忽略多余空格时,关键值按比较时的形式显示,即转为小写或去除空格后的样子。按位置匹配时,只有一个 row 列,记录行号。
original_row、updated_row两个文件中的数据行号;某一边不存在该行时为空。
column、original_value、updated_value每个修改的单元格占一行。新增和删除的行各占一行,这几列为空。

报告是以更新后文件命名的 UTF-8 CSV,例如 feb-changes.csv。可以在 CSV 在线查看 中打开,对这些变化排序或搜索。

为什么某些行显示为新增、删除或修改

  • 每一行都显示为既新增又删除。两个文件中关键值的写法不同,例如 00123 对 123,或末尾多了空格。请开启忽略多余空格,或在 清洗 CSV 数据 中修正该列。关键值始终按文本比较,所以前导零一定会影响匹配。
  • 相等的数字显示为修改。45.00 和 45.0 是不同的文本;填入 0 或 0.005 这样的容差,即可按数字比较。使用逗号小数或千分位分隔符的数字始终按文本比较。
  • 列表中找不到某个关键列。只有两个文件都有的列才能作为关键列,而且名称必须完全相同。如果整个表头都挤进了一列,请检查导入设置。
  • 从某一行开始,后面每一行都显示为修改。你在按位置匹配,而中间插入或删除了一行。请改为按关键列匹配。

对比的限制与隐私

每个文件最大 25 MB、10 万行、250 列和 200 万个单元格。对比不采用流式处理:两个文件都保存在内存中,修改选项时差异会实时更新。

文件在你的浏览器中对比,不会发送到任何服务器。如果想把两个版本合在一起,请使用 合并或关联 CSV 文件;要按规则检查单个文件,请使用 CSV 校验。

示例:按 SKU 对比两份商品列表

两份以 sku 为关键列的商品清单,使用默认的精确比较设置。两份文件的行顺序不同,但这不影响结果。如果开启忽略大小写和忽略多余空格,并把容差设为 0.001,就只剩下 00456 的 stock 变化。

CSV
jan.csv (original)
sku,name,price,stock
00123,Desk lamp,19.90,4
00456,Shelf,45.00,2
00789,Stool,12.00,9

feb.csv (updated)
sku,name,price,stock
00456,Shelf,45.0,0
00123,Desk Lamp ,19.90,4
01010,Bench,80.00,1
feb-changes.csv
change,sku,original_row,updated_row,column,original_value,updated_value
changed,00123,1,2,name,Desk lamp,"Desk Lamp "
changed,00456,2,1,price,45.00,45.0
changed,00456,2,1,stock,2,0
removed,00789,3,,,,
added,01010,,3,,,

常见问题

行的顺序有影响吗?

按关键列匹配时没有影响:无论行在文件中的什么位置,都能按关键值找到。只有按行位置匹配时,顺序才有影响。

哪个文件应该作为原始文件?

较旧的那个。只在第二个文件中出现的行报告为新增,只在第一个文件中出现的行报告为删除,所以交换两个文件,这两份列表以及修改前后的值也会互换。

能对比名称不同的列吗?

只有两个文件中表头相同的列才会被比较,而且每个关键列在两个文件中都必须使用相同的名称。请先用 重命名和调整 CSV 列顺序 修改其中一个文件的列名。

标准与参考资料