跳转到主要内容

用于比较多个字典的CLI和Python API

项目描述

Python Package Index Build Status Test Coverage

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 选项与 jqinput_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

需求

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

dictsdiff-0.1.1.tar.gz (12.5 kB 查看哈希值)

上传时间 源代码

由以下机构支持