Python CLI工具和库,用于比较CSV和JSON文件
项目描述
csv-diff
用于查看两个CSV、TSV或JSON文件之间差异的工具。有关此项目的背景信息,请参阅生成旧金山官方树木列表的提交日志(以及sf-tree-history仓库提交日志)。
安装
pip install csv-diff
使用方法
考虑两个CSV文件
one.csv
id,name,age
1,Cleo,4
2,Pancakes,2
two.csv
id,name,age
1,Cleo,5
3,Bailey,1
csv-diff
可以显示文件之间差异的易读摘要
$ csv-diff one.csv two.csv --key=id
1 row changed, 1 row added, 1 row removed
1 row changed
Row 1
age: "4" => "5"
1 row added
id: 3
name: Bailey
age: 1
1 row removed
id: 2
name: Pancakes
age: 2
--key=id
选项意味着应该将id
列视为唯一键,以识别哪些记录已更改。
该工具将自动检测您的文件是逗号分隔还是制表符分隔。您可以使用--format=tsv
或--format=csv
覆盖此自动检测,并强制工具使用特定格式。
您还可以提供JSON文件,前提是它们是具有相同键的JSON对象数组。如果您的输入文件是JSON,请使用--format=json
。
使用--show-unchanged
包括至少有一个更改的行的未更改值的完整详细信息
% csv-diff one.csv two.csv --key=id --show-unchanged
1 row changed
id: 1
age: "4" => "5"
Unchanged:
name: "Cleo"
JSON输出
您可以使用--json
选项获取机器可读的差异
$ csv-diff one.csv two.csv --key=id --json
{
"added": [
{
"id": "3",
"name": "Bailey",
"age": "1"
}
],
"removed": [
{
"id": "2",
"name": "Pancakes",
"age": "2"
}
],
"changed": [
{
"key": "1",
"changes": {
"age": [
"4",
"5"
]
}
}
],
"columns_added": [],
"columns_removed": []
}
添加模板化额外信息
您可以使用--extra
选项来指定要显示在可读格式中的附加键。
--extra name "Python format string with {id} for variables"
例如,要为每个具有ID的项目输出链接https://news.ycombinator.com/latest?id={id}
,可以使用以下方法
csv-diff one.csv two.csv --key=id \
--extra latest "https://news.ycombinator.com/latest?id={id}"
这些附加键显示如下
1 row changed
id: 41459472
points: "24" => "25"
numComments: "5" => "6"
extras:
latest: https://news.ycombinator.com/latest?id=41459472
作为Python库
您也可以像这样将Python库导入到自己的代码中
from csv_diff import load_csv, compare
diff = compare(
load_csv(open("one.csv"), key="id"),
load_csv(open("two.csv"), key="id")
)
diff
现在将包含与上面--json
示例中输出相同的数据结构。
如果CSV的列已更改,则在计算对特定行所做的更改时,将忽略添加或删除的列。
作为Docker容器
构建镜像
$ docker build -t csvdiff .
运行容器
$ docker run --rm -v $(pwd):/files csvdiff
假设当前目录包含两个csv文件:one.csv two.csv
$ docker run --rm -v $(pwd):/files csvdiff one.csv two.csv
替代方案
- csvdiff是一个“快速比较CSV文件的工具” - 与
csv-diff
相比,您可能从该工具中获得更好的结果,特别是对于较大的文件。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
csv_diff-1.2.tar.gz (11.9 kB 查看哈希)
构建分布
csv_diff-1.2-py3-none-any.whl (13.6 kB 查看哈希)
关闭
csv_diff-1.2.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f6c251542fbcd9d6eef8b27c3870fc4dfc3592c880c34dac57ed94e382f2d53b |
|
MD5 | b5afcf156b1fa071544282526d987b13 |
|
BLAKE2b-256 | 8e40428351c5f57b676e30b7f3a2940b3d017ee1b8e4e091dec4931e488a59fe |
关闭
csv_diff-1.2-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bf9c621a45d250f54a8b08cab14813509aa2709b3f7ad45dffc130383f9a8190 |
|
MD5 | ec98c4d69318a98a4d099a96fa66f937 |
|
BLAKE2b-256 | 239b72d060d002cd391044ddd0816bd5027f6fda6d62104b81a90a7c3611345c |