返回从一个对象树转到另一个对象树的命令/增量列表

objdiff的Python项目详细描述


取两组容器,并在它们之间提供一个(深)增量

此模块用于区分yaml文件和磁盘上的文件树。 最好能解决如何从一种状态过渡到另一种状态(主要是 使用容器)。

注意:由于使用了“yield from

怎么做?

objdiff在python中为列表和元组使用内置的difflib 并为字典实现自己的比较代码。用户类型是 通过collections.abc.Mapping检测 类型和实例比较,并被视为字典(即未排序的项 =>;值映射)

这看起来像什么?

>>> import objdiff
>>> a = {'a': 1, 'b':[1,2,3], 'c':None}
>>> b = {'a': 1, 'b':[1,4], 'c':'hello'}
>>> objdiff.obj_diff(a, b)
<generator object obj_diff at 0xb6a3da80>

我们返回一个迭代器并利用 对象的有效性和增量

>>> from pprint import pprint
>>> pprint(list(objdiff.obj_diff(a, b)))
[modified(path=['c'], old=None, new='hello'),
 modified(path=['b'], old=[1, 2, 3], new=[1, 4]),
 equal(path=['a'], old=1, new=1)]

展开生成器,我们得到一堆包含 命令值,键路径,前后值

>>> c = {'a':{1: None, 2: 2, 3: 3}, 'b': None}
>>> d = {'a':{1: 1, 2: 2}, 'b': {'1':{}, '2':{'2':2}}}
>>> pprint(list(objdiff.obj_diff(c, d)))
[modified(path=['b'], old=None, new={'1': {}, '2': {'2': 2}}),
 modified(path=['a', 1], old=None, new=1),
 equal(path=['a', 2], old=2, new=2),
 deleted(path=['a', 3], val=3)]

注意:在上面,如何在 命令值。

总共有4种类型的命令,如下所示,其中一种是内部类型 这是可以忽略的。

  • added
  • deleted
  • modified
  • equal (internal, scalar values are equal)

更多文档可在Blitz works docs

更改日志

1.2.3 2016年8月26日

  • Actually include module with release

1.2.2 2016-03-28

  • Split out CHANGELOG to seperate file
  • Add documentation
  • Add doctests
  • Protection against PYTHONHASHSEED randomisation for doctests
  • objdiff arg names where renamed to make relationship clearer

1.2.1 2016-03-26

  • Add ‘version guard’ to prevent install on python older than version 3.3

1.2 2016年3月26日

  • Documentation updates
  • ‘deep_update’ function

1.1 2016年3月24日
  • Cleanups of code
  • Documentation updates
  • More infrastructure in src module

1.0 2016年3月24日

  • Initial release
  • Working objdiff
  • diffing of lists and dicts functions

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

推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误