用于比较多个词典的cli和python api

dictsdiff的Python项目详细描述


Python Package IndexBuild StatusTest Coverage

dictsdiff提供了用于比较的cli和python接口 任意数量的嵌套字典并以表格形式显示 通过pandas.dataframe格式化。

cli

用法:

dictsdiff FILE [JSON_PATH] [FILE [JSON_PATH] ...]
dictsdiff --ndjson=FILE.ndjson
cat *.ndjson | dictsdiff [--ndjson=-]

当给出多个文件的路径时,它从 这些文件并比较(可能)其中的嵌套值。这个 不同或缺少的键值对显示在表中 格式。文件路径FILE后面可以跟一个JSONPathJSON_PATH,以$.开头如果FILE$.,将./前置到FILE,以消除参数的歧义。 JSON_PATH可用于非JSON文件

如果没有给出任何文件,则假定换行符分隔的json (ndjson)被馈送到stdin

示例

$ 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  100.0
1.json  210.0
2.json  21  NaN
$ cat *.json | dictsdiff
   a  b.d  b.e
0100.0
1210.0
221  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

要求

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ByteArrayOutputStream的java解码属性   java S3 SDK在上载时更新单个对象,而不是创建新文件   java hibernate:无法从eclipse连接到DB   java如何在强制转换JComboBox之前检查其类型?   http从Java中的GETPOST请求方法捕获URI、资源名称,如开发人员工具中所示   java在Spring@Bean方法中返回接口的局限性   Java中的Web服务和客户端(使用Eclipse Apache Axis 2自底向上服务)某些代码会引发异常   java spring安全+rest不起作用   java将LinkedList添加到包含LinkedList的LinkedList并更改添加的LinkedList   java是否临时删除对象的属性?   java使用AnimatedGifEncoder类创建的gif图像的部分帧是不透明的   java如何高效地处理maven3时间戳快照?   java向集合对象添加另一项   java如何将动态参数传递给jquery函数   java使用libGdx桌面端口作为Android GLES20的仿真器