在两个 CSV 文件之间生成差异。
项目描述
概述
在命令行上生成两个 CSV 文件之间的差异。
csvdiff允许您比较两个 CSV 文件的语义内容,忽略行和列排序等内容,以了解实际更改的内容。如果您要比较自动系统一天到一天的输出,这很有用,这样您就可以查看发生了什么变化。
它对于维护第三方数据的补丁也很有用。由csvdiff生成的差异是 JSON 的子集,可以使用匹配的csvpatch命令存储和应用。如果上游数据发生变化,您可以获取新版本并轻松地重新应用您的更改。
安装
你首先需要 Python 和 pip。然后运行:
pip install csvdiff
例子
例如,假设我们有a.csv:
id,name,amount 1,bob,20 2,eva,63 3,sarah,7 4,jeff,19 6,fred,10
在对数据进行一些更改和更正之后,我们现在有了b.csv:
id,name,amount 1,bob,23 <--- changed 3,sarah,7 4,jeff,19 5,mira,81 <--- added 6,fred,13 <--- changed
现在我们可以要求对差异进行总结:
$ csvdiff --style=summary id a.csv b.csv 1 rows removed (20.0%) 1 rows added (20.0%) 2 rows changed (40.0%)
或者查看完整的 diff 漂亮打印,使其更具可读性:
$ csvdiff --style=pretty --output=diff.json id a.csv b.csv
$ cat diff.json
{
"_index": [
"id"
],
"added": [
{
"amount": "81",
"id": "5",
"name": "mira"
}
],
"changed": [
{
"fields": {
"amount": {
"from": "20",
"to": "23"
}
},
"key": [
"1"
]
},
{
"fields": {
"amount": {
"from": "10",
"to": "13"
}
},
"key": [
"6"
]
}
],
"removed": [
{
"amount": "63",
"id": "2",
"name": "eva"
}
]
}
如果要忽略比较中的列,则可以通过指定要忽略的列名的逗号分隔列表来实现。例如:
$ csvdiff --style=summary --ignore-columns=amount id a.csv b.csv 1 rows removed (20.0%) 1 rows added (20.0%) 0 rows changed (0%)
您还可以选择仅比较特定数量的有效数字的数字字段。对数量级使用负有效数字:
$ csvdiff --style=summary id a.csv c.csv 0 rows removed (0.0%) 0 rows added (0.0%) 2 rows changed (40.0%) $ csvdiff --style=summary id --significance=-1 a.csv c.csv files are identical
以这种方式生成的差异包含所有已更改的数据,并且可以在原始数据更改后重新应用。例如,假设更多数据被添加到a.csv中,得到a-plus.csv:
id,name,amount 1,bob,20 2,eva,63 3,sarah,7 4,jeff,19 6,fred,10 8,亨利,9
我们可以使用csvpatch命令重新应用我们的更改:
$ csvpatch --input=diff.json --output=b-plus.csv a-plus.csv $ cat b-plus.csv id,name,amount 1,bob,23 3,sarah,7 4,jeff,19 5,mira,81 6,fred,13 8,henry,9
如果您使用 csvdiff 来转换您无法控制的数据,这会很有用。在这种情况下,您维护补丁文件并在上游数据提供者为您提供新文件时简单地重新应用它。
有关更多使用选项,请运行csvdiff --help或csvpatch --help。
执照
BSD 许可证
历史
0.3.3 (2017-07-20)
添加 –significance 选项以限制有效数字。
0.3.2 (2017-07-20)
为不同的分隔符添加 –sep 选项。
修复修补后的文档变空时的错误 (#29)。
0.3.1 (2016-04-20)
修复摘要模式中的错误。
检查行相互渗入。
0.3.0 (2015-01-07)
使用 JSON 模式标准化补丁格式。
提供应用差异的匹配 csvpatch 命令。
为 csvpatch 添加手册页和文档。
使用退出代码来表示差异。
向 csvdiff 添加一个 –quiet 选项。
0.2.0 (2014-12-30)
使用 click 作为命令行界面。
放弃对 YAML 的支持,转而使用打印精美的 JSON。
使用 –style 选项更改输出样式。
提供完整的手册页。
0.1.0 (2014-03-15)
PyPI 上的第一个版本。
在两个 CSV 文件之间生成 JSON 或 YAML 差异
使用-k指定多个关键组件
可以提供差异总结
假设文件使用标准逗号分隔、双引号和带有字段名称的标题行
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。