用于比较多个字典的CLI和Python API
项目描述
dictsdiff 提供了一个CLI和Python接口,用于比较任意数量的嵌套字典,并通过 pandas.DataFrame 以表格格式显示。
CLI
用法
dictsdiff FILE [JSON_PATH] [FILE [JSON_PATH] ...] dictsdiff --ndjson=FILE.ndjson cat *.ndjson | dictsdiff [--ndjson=-]
当给出多个文件的路径时,它会从这些文件中加载字典并比较其中的(可能)嵌套值。不同的或缺失的键值对以表格格式显示。文件路径 FILE 后可以跟一个以 $. 开头的 JSONPath JSON_PATH。如果 FILE 以 $. 开头,则在 FILE 前面添加 ./ 以消除歧义。 JSON_PATH 可以用于非JSON文件。
当没有给出文件时,它假定从stdin接收的是行分隔的JSON(ndjson)。
示例
$ echo '{"a": 1, "b": {"c": 0, "d": 0, "e": 0}}' > 0.json
$ echo '{"a": 2, "b": {"c": 0, "d": 1, "e": 0}}' > 1.json
$ echo '{"a": 2, "b": {"c": 0, "d": 1}}' > 2.json
$ dictsdiff *.json
a b.d b.e
path
0.json 1 0 0.0
1.json 2 1 0.0
2.json 2 1 NaN
$ cat *.json | dictsdiff
a b.d b.e
0 1 0 0.0
1 2 1 0.0
2 2 1 NaN
如果JSON文件通过 jq 预处理,dictsdiff 可以在通过 --compact-output/-c 传递时处理其输出
jq --compact-output '' **/*.json | dictsdiff
要传递JSON文件的原始文件路径到 dictsdiff,请使用 --info-key 选项与 jq 的 input_filename 结合使用,例如:
jq --compact-output '.path = input_filename' **/*.json \ | dictsdiff --info-key=path
Python接口
dictsdiff.diff_dicts
>>> from dictsdiff import diff_dicts
>>> dd = diff_dicts([
... {'a': 1, 'b': {'c': 0, 'd': 0}},
... {'a': 2, 'b': {'c': 0, 'd': 1}},
... {'a': 1, 'b': {'c': 0, 'd': 1}},
... ])
>>> dd.keys
[('a',), ('b', 'd')]
>>> dd.pretty_diff()
a b.d
0 1 0
1 2 1
2 1 1
dictsdiff.diff_files
>>> from dictsdiff import diff_files
>>> _ = open('0.json', 'w').write('{"a": 1, "b": 2}')
>>> _ = open('1.json', 'w').write('{"a": 1, "b": 3}')
>>> dd = diff_files(['0.json', '1.json'])
>>> dd.keys
[('b',)]
>>> dd.pretty_diff()
b
path
0.json 2
1.json 3
dictsdiff.diff_ndjson
>>> import io
>>> from dictsdiff import diff_ndjson
>>> ndjson = u'''
... {"a": 1, "b": {"c": 0, "d": 0}}
... {"a": 2, "b": {"c": 0, "d": 1}}
... '''.strip()
>>> dd = diff_ndjson(io.StringIO(ndjson))
>>> dd.keys
[('a',), ('b', 'd')]
>>> dd.pretty_diff()
a b.d
0 1 0
1 2 1
安装
pip install dictsdiff # or pip install https://github.com/tkf/dictsdiff/archive/master.zip
需求
PyYAML (可选)
toml (可选)
jsonpath-rw (可选)
项目详情
关闭
dictsdiff-0.1.1.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 8f810588de6bafdb2fc8b95dd40e45236a48c24fe8c868c8a3782a88d9056bea |
|
| MD5 | 5353df2b1bde662cd5ec8d6657336cce |
|
| BLAKE2b-256 | c2b174f09a68888f00a4da4a7507f67c1f8fe700f690b265dfd1e396cec6d8d7 |