deepdiff比较两个json文件数据差异性

deepdiff比较两个json文件数据差异性

Python代码片

import json
import sys

from deepdiff import DeepDiff
from deepdiff import grep, DeepSearch
from deepdiff import DeepHash

# print(DeepDiff("abc", "abcd", ignore_order=True))


class CompareJson:
    """比较两个json格式的数据文件"""
    def read_json(self, filename):
        '''
        读取json格式的数据
        '''
        try:
            with open(filename, 'r', encoding='utf-8') as fileHandle:
                text = fileHandle.read()
            return json.loads(text)
        except IOError as e:
            print("Read file Error:" + e)
            sys.exit()

    # 1、type_changes:类型改变的key
    # 2、values_changed:值发生变化的key
    # 3、dictionary_item_added:字典key添加
    # 4、dictionary_item_removed:字段key删除
    # exclude_paths 排除指定的字段
    # ignore_order 排序时忽略
    @staticmethod
    def diff_json(filename1, filename2):
        d_dict = DeepDiff(CompareJson().read_json(filename1),CompareJson().read_json(filename2), ignore_order=True)
        if d_dict == {}:
            print("两个文件内容一致")
        for k, v in d_dict.items():
            if k == "type_changes":
                print("类型改变的key:", v)
            elif k == "values_changed":
                print("值发生变化的key:", v)
            elif k == "dictionary_item_added":
                print("字典key添加:", v)
            elif k == "dictionary_item_removed":
                print("字段key删除:", v)


CompareJson.diff_json("../file/no1.json", "../file/no2.json")

生成可实话HTML文件:代码块

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import difflib
import json
import sys
import time
from hashlib import md5

def read_json(filename):
    '''
    读取json格式的数据
    '''
    try:
        with open(filename, 'r', encoding='utf-8') as fileHandle:
            text = fileHandle.read().replace(' ', '')
        return json.loads(text)
    except IOError as e:
        print("Read file Error:" + e)
        sys.exit()


def md5_file(filename):
    '''
    比较两个文件内容的md5值
    '''
    m = md5()
    try:
        with  open(filename, 'rb') as a_file:  # 需要使用二进制格式读取文件内容
            m.update(a_file.read())
    except Exception as e:
        print("文件读取失败:%s" % e)
    return m.hexdigest()


def diff_json(filename1, filename2, ignore_fields):
    '''
    比较两个json格式的数据文件,不同之处输出到html文件中
    '''
    file1Md5 = md5_file(filename1)
    file2Md5 = md5_file(filename2)

    if file1Md5 != file2Md5:
        text1_lines = read_json(filename1)
        text2_lines = read_json(filename2)
        a_filtered = {k: v for k, v in text1_lines.items() if k not in ignore_fields}
        b_filtered = {k: v for k, v in text2_lines.items() if k not in ignore_fields}
        d = difflib.HtmlDiff()

        # context=True时只显示差异的上下文,默认显示5行,由numlines参数控制,context=False显示全文,差异部分颜色高亮,默认为显示全文
        result = d.make_file(sorted(a_filtered), sorted(b_filtered), filename1, filename2, context=True)
        # 内容保存到result.html文件中
        print('json数据比对结果写入html中.')
        with open('file/{}_diff.html'.format(time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime())), 'w', encoding='utf-8') as result_file:
            result_file.write(result)
    else:
        print('两个文件内容一致')


if __name__ == '__main__':
    # ignore_fields 忽略比对的字段key
    ignore_fields = ['wid']
    diff_json("file/no1.json", "file/no2.json", ['wid'])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值