深度比较Python对象之间的差异

发表于:2022-8-15 09:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:费弗里    来源:Python大数据分析

#
Python
分享:
  很多情况下我们需要对两条数据之间的差异进行比较,如果仅仅是针对数值型对象,那么两者的差值就是所谓的差异,但是如果要比较两条JSON数据间的差异呢?
  由于JSON数据具有可嵌套可分层的特点,想要明确找出两条JSON数据间的差异并加以描述,如果自己书写方法还是有些费事。这种情况我们就可以使用到第三方库deepdiff中的DeepDiff()方法,它基于递归对不同对象进行深度比较。
  使用pip install deepdiff完成安装之后,通过from deepdiff import DeepDiff导入所需功能,就可以直接对两个JSON对象之间的差异进行比较,下面是一个简单的例子:
  from deepdiff import DeepDiff
  obj1 = {
      'level1': [
          {
              'level1-1': 1,
              'level1-2': 1,
              'level1-3': [
                  {
                      'level1-3-1': [1, 2, 3]
                  }
              ]
          }
      ],
      'level2': 'a'
  }
  obj2 = {
      'level1': [
          {
              'level1-1': 1,
              'level1-2': 1,
              'level1-3': [
                  {
                      'level1-3-1': [1, 2, 1]
                  }
              ]
          }
      ],
      'level2': 'b'
  }
  DeepDiff(obj1, obj2)
  可以看到打印的检测结果中具体声明了差异内容及具体位置,可以帮助我们开展后续其他处理。
  除此之外,deepdiff还具有非常丰富的额外功能,譬如忽略对指定类型数据的比较检查:
  亦或是通过定义层次规则,令DeepDiff()跳过对指定位置元素的差异检查:
  还支持利用正则表达式定义要忽略的模糊层次规则,譬如下面的例子中我们使用正则批量忽略了多个键值对:
  限制针对浮点数的检查精度,譬如下面的例子中限定significant_digits=2后,小数点后第二位以后的差异便被忽略:
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号