原始 CSV
修改后的 CSV

CSV Diff:在线比较两个 CSV 文件

粘贴并并排比较两个 CSV 数据集。行级和字符级高亮,支持带引号的字段和制表符分隔值。

什么是 CSV diff 工具?

一个免费的浏览器内工具,用于比较两个 CSV 文件。将旧版本粘贴到左侧,新版本粘贴到右侧,更改的行会立即高亮显示。数据不会离开您的机器。

该工具理解 CSV 语法:带引号的字段(包括含有逗号的字段)、嵌入的换行符和转义的引号。diff 在行级别工作,然后在变更的行内进行字符级细化,因此您可以看到价格从 4.99 变为 5.49 而不只是一个红色行。

如果您曾花时间试图找出两个 CSV 导出之间哪一行发生了变化,或者哪个产品价格被更新了,这个工具能立即告诉您。

diff 的实际工作原理

diff 首先在行级别工作——找出哪些行被添加、删除或修改。然后在每个修改的行内,它进行字符级 diff,精确显示字段中发生了什么变化。这意味着您可以看到 Widget, small 中的价格变化,而不只是一整行标记为已更改。

CSV 有多种方言:逗号分隔、制表符分隔(TSV)、分号分隔(欧洲 Excel 常见)。该工具以您粘贴的任何格式工作,但两侧必须使用相同的分隔符才能进行有意义的 diff。如果两侧分隔符不同,每行看起来都会有所不同。

引用规则遵循 RFC 4180:包含逗号、引号或换行符的字段必须用双引号括起来,内部的字面引号通过双写来转义。对于更复杂的 CSV 工作,Python 的 csv 模块是首选的参考实现。

三步比较 CSV

两个文本窗格,一个 diff。无需注册,无需上传,无需服务器往返。

  1. 1

    粘贴或上传您的 CSV

    将旧 CSV 粘贴到左侧,新 CSV 粘贴到右侧。或者点击任意一侧的上传直接加载 .csv.tsv.txt 文件。点击示例按钮,两个窗格都会填充一个产品目录示例。

  2. 2

    检查标题和分隔符

    确保两侧使用相同的分隔符(逗号、制表符或分号)。如果两侧都有标题行,diff 会将标题视为普通数据行,所以标题中的列重命名会在顶部显示为单行差异。

  3. 3

    查看 diff

    删除的行在左侧以红色高亮显示,插入的行在右侧以绿色高亮显示。修改的行同时在两侧显示,字符级变化精确标记。滚动任意一侧,另一侧随之跟随。

CSV diff 适合的场景

审核产品价格或库存变更

将上个月的产品导出粘贴到左侧,这个月的粘贴到右侧,立即看到哪些 SKU 的价格、库存或供应商发生了变化。字符级 diff 会精确显示 4.99 变为 5.49,而不只是将整行标记为已更改。

比较数据库导出

数据库导出通常是 CSV 格式。在部署数据迁移后,比较之前和之后的快照,确认只有预期的行发生了变化。这比逐行检查大型数据集要快得多。

核对财务报告

财务团队经常导出 CSV 报告进行比较。将两个期间的导出并排放置,立即看到哪些行被添加、删除或修改。字符级 diff 让数字变化一目了然。

比较联系人或邮件列表

将两个版本的联系人列表导出进行比较,找出新增、删除或更新了哪些联系人。这对于在合并或清理后验证 CRM 数据特别有用。

验证 ETL 流水线输出

在运行 ETL(提取、转换、加载)流水线后,比较输入和输出 CSV,确认转换按预期工作。这可以帮助在数据到达目标系统之前捕获数据质量问题。

审计电子表格导出

从 Excel 或 Google Sheets 导出两个版本的数据,在此进行比较,而无需打开电子表格工具。这对于在共享工作簿中跟踪变更特别有用。

CSV 快速参考

关于此工具最常暴露的 CSV 解析边缘情况的简短速查表。语法参考是 RFC 4180 加上真实电子表格工具实际产生的内容。

TopicWhat this tool does
RFC 4180 引用包含逗号、双引号或换行符的字段必须用双引号括起来。"Widget, small" 是一个字段。普通值如 4.99 不需要引号。请参阅 RFC 4180
转义双引号引用字段内的字面 " 通过双写来转义。"He said ""hi""" 是值 He said "hi"。反斜杠转义不是标准 CSV,尽管一些工具接受。
嵌入换行符根据 RFC 4180,换行符在引用字段内是允许的。一个单元格中的多行地址是有效的 CSV。diff 将每个物理行视为一个单元,所以带有换行符的字段可能会在包含行上显示更改。
行尾(CRLF vs LF)RFC 4180 规定 CRLF(\r\n)。Excel 输出 CRLF。大多数 Unix 工具输出 LF。在左右两侧混合使用会使每行看起来都已更改。在 diff 前规范化行尾。
BOM(UTF-8)Excel 保存的 CSV 通常以 UTF-8 BOM(EF BB BF)开头。Unicode BOM FAQ 将其标记为 UTF-8 的可选项和不必要项。两个文件之间不对称的 BOM 会在第 1 行产生幽灵 diff。
分隔符方言逗号是标准;欧洲 Excel 导出使用分号(;),因为在许多本地化中逗号是小数点。TSV(制表符分隔)是一种常见的变体;请参阅 TSV 背景。两个文件必须使用相同的分隔符,diff 才有意义。
标题行此工具将第 1 行视为数据。列重命名显示为顶部的单行 diff。如果您只想比较数据行,请在粘贴前从两个窗格中删除标题。大多数解析器(Python 的 csv.DictReader、pandas)按约定将第 1 行视为标题,但文件格式本身并不要求。
编码通过浏览器中的 FileReader 仅支持 UTF-8。Latin-1(ISO-8859-1)和 Windows-1252 可以加载,但重音字符会显示错误。在粘贴前使用 iconv 或 VS Code 的"以编码方式保存"进行转换。

CSV diff:常见问题

这个工具会保存或上传我的 CSV 吗?

不会。diff 完全在您的浏览器中运行。没有任何内容被发送到服务器、记录或存储。粘贴客户数据或财务记录后关闭标签页,不会留下任何副本。打开 DevTools 并查看网络标签,在比较时没有出站请求。

该工具支持哪些文件编码?

浏览器的 FileReader 路径只正确解码 UTF-8。Latin-1 或 Windows-1252 文件可以加载,但重音字符会显示错误(例如 café 变成 café)。带 BOM 的 UTF-16 文件会看起来完全损坏。请先转换非 UTF-8 文件:在终端中使用 iconv -f WINDOWS-1252 -t UTF-8 input.csv > out.csv;在 VS Code 中,使用"以编码方式重新打开"然后"以编码方式保存"为 UTF-8。Python 的 csv 模块和 pandas 都允许您在读取时指定源编码。

可以比较多大的 CSV 文件?

几 MB 以内感觉即时。超过 10 MB 浏览器开始感到压力,大部分成本在于渲染高亮 diff(而非计算它)。对于非常大的导出(50 MB 以上),先将两个文件过滤到您真正关心的列或行。来自 csvkit 的 csvcut 和 csvgrep,将 CSV 转换为 JSON 后使用 jq,或者快速的 awk/grep 都是好的前置处理方法。然后在此粘贴修剪后的片段。

免费吗?需要注册吗?

是的,不需要。免费,没有账户,没有试用期,没有比较 CSV 文件次数的限制。粘贴两个版本,更改的行立即亮起。没有任何功能藏在登录后面,上传按钮无需账户即可使用,您复制或下载的所有内容都以纯 CSV 输出,没有水印,没有添加的行。

可以上传而不是粘贴 CSV 文件吗?

可以。点击任意窗格上的上传,从磁盘直接选择 .csv.tsv.txt 文件。浏览器使用 FileReader 读取文件并将其作为文本放入窗格,所以它永远不会被发送到任何地方。您可以上传一侧并粘贴另一侧,以同样的方式查看 diff。

可以比较 Excel 或 Google Sheets 文件吗?

.xlsx 工作簿本身不行,因为它是一个压缩的二进制文件,而不是文本。请先将工作表导出为 CSV。在 Excel 中使用"另存为"并选择 CSV UTF-8;在 Google Sheets 中使用"文件",然后"下载",然后"逗号分隔值"。然后在此粘贴或上传两个 CSV 导出。注意分隔符:欧洲版 Excel 可能会使用分号,确保两侧一致。

可以同时比较两个以上的 CSV 文件吗?

不能在一个视图中。工具为两侧设计:一个原始版和一个修改版,所以三方合并或一个目录的导出超出了范围。改为两两比较:周一对周二,然后周二对周三。对于跨多个文件的批量工作,将它们加载到 SQLite 或使用 csvkit,在那里进行比较。

可以在手机上使用,或者离线使用吗?

两者都可以。页面是响应式的,尽管两个 CSV 窗格并排在宽屏上比在窄手机屏幕上更容易阅读。所有内容在浏览器中运行,所以一旦页面加载完成,您可以断开 WiFi,diff 仍然有效。比较时没有服务器调用,您可以在 DevTools 的网络标签中验证这一点。

隐私与工作原理

您的 CSV 永远不会离开您的浏览器。读取、diff 和渲染都在您自己的机器上本地运行。没有对您输入的分析,没有日志,没有"贴心的"云端往返。如需验证,打开 DevTools,切换到网络标签并查看。比较时没有出站请求。格式参考是 RFC 4180,Python 的 csv 模块文档是我们交叉检查解析边缘情况的参考。