返回从一个对象树转到另一个对象树的命令/增量列表
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
- 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