DeepDiff模块常用来效验两个对象是否一致,并找出其中差异之处,提供了:

  1. DeepDiff:字典,可迭代项,字符串和其他对象的深层差异。它将递归查找所有更改。
  2. DeepSearch:在其它对象在搜索对象
  3. DeepHash:根据对的内容对其进行哈希处理
  4. 官网地址:https://deepdiff.readthedocs.io/en/latest/
  5. 本文只介绍DeepDiff的使用
  6. DeepDiff可以用来校验多种类型的文件内容,例如:txt、json、图片等

    校验:txt文件

    场景1 :a和b两个文件中内容都相同

    a.txt   内容:python入门学习

    b.txt   内容:  python入门学习

    相同输出:{}空字典,可以通过空字典进行判断

    from deepdiff import DeepDiff

    f1, f2 = open("a", "r", encoding="utf-8").read(), open("b", "r", encoding="utf-8").read()
    print(DeepDiff(f1, f2))

    #相同输出:{}

    a和b两个文件中内容不相同

    a.txt   内容:python学习,django学习

    b.txt   内容:  python入门学习

    from deepdiff import DeepDiff
    f1, f2 = open("a", "r", encoding="utf-8").read(), open("b", "r", encoding="utf-8").read()
    print(DeepDiff(f1, f2))

    当两个文件内容中存在不同时,输出如下:

    {'values_changed': {'root': {'new_value': 'python入门学习', 'old_value': 'python学习,django学习'}}}

    通过是否有values_changed来判断不同,root中列出了那些内容不相同。

    校验:json

    from deepdiff import DeepDiff

    class deepdiff_Handle(object,):
    def __init__(self,data1,data2):
    self.deep=DeepDiff(data1,data2)
    def diff_return(self):
    # print(self.deep)
    if dict(self.deep).get('dictionary_item_added') != None:
    return 'dictionary_item_added数据有新增'
    elif dict(self.deep).get('dictionary_item_removed') != None:
    return 'dictionary_item_removed数据有删除'
    elif dict(self.deep).get('values_changed') != None:
    return 'values_changed值有改变'
    else:
    return '没有异常'

    if __name__ == '__main__':
    d1 = {"a": 1, "b": 2, "c": 3, "e": {"a": 3}}
    # 数据有新增
    # d2 = {"a": 1, "b": 2, "c": 3, "d": 4, "e": {"a": 1}}
    # 数据有删除
    # d2 = {"a": 1, "b": 2, "c": 3}
    # 值有改变
    # d2 = {"a": 1, "b": 2, "c": 3, "e": {"a": 4}}
    # 没有变化
    d2 = {"a": 1, "b": 2, "c": 3, "e": {"a": 3}}
    deep=deepdiff_Handle(d1, d2)
    print(deep.diff_return())

    a和b b中有的字段a中没有,输出:dictionary_item_added, a和b a中有的字段b中没有,输出:dictionary_item_removed,当两个对象中都存在,只是值不相同时,输出:values_changed: