当前位置: 首页 > news >正文

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

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

Python代码片

import json
import sysfrom 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 排序时忽略@staticmethoddef 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 md5def 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 忽略比对的字段keyignore_fields = ['wid']diff_json("file/no1.json", "file/no2.json", ['wid'])

相关文章:

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

deepdiff比较两个json文件数据差异性 Python代码片: import json import sysfrom deepdiff import DeepDiff from deepdiff import grep, DeepSearch from deepdiff import DeepHash# print(DeepDiff("abc", "abcd", ignore_orderTrue))class …...

文件内容搜索工具 - Python实现

在本篇文章中,我们将介绍如何使用 wxPython 库创建一个简单的文件搜索工具。这个工具允许用户选择一个文件夹,并在该文件夹中的所有 .py 文件中查找指定的文字,并显示匹配的位置。 C:\pythoncode\blog\searchwordinpyfile.py 代码实现 我们首…...

vue静态html加载外部组件

当我们在开发vue应用时, 使用的是html页面开发, 需要引用外部vue组件, 怎么办呢, 首先我们引用http-vue-loader.js文件, 像下面这样: <script src"/assets/javascript/vue.min.js"></script> <script src"/assets/javascript/http-vue-loader.j…...

WebSocket 中的心跳是什么,有什么作用?

在网络应用开发中&#xff0c;WebSocket 是一种重要的通信协议&#xff0c;它允许客户端和服务器之间建立持久性的双向通信连接。然而&#xff0c;为了保持连接的稳定性&#xff0c;WebSocket 中的心跳是一个不可或缺的概念。本文将详细介绍 WebSocket 中的心跳是什么&#xff…...

Android类加载机制

要说Android的类加载机制 &#xff0c;就离不开 类加载器ClassLoader&#xff0c;它是一个抽象接口 下面这个图还是比较好表达了类加载流程&#xff0c;但如果不看我红色画的线&#xff0c;就会感觉有点乱&#xff0c;需要注意是采用的是双亲委派模式&#xff0c;class加载要先…...

微信小程序列表加载更多

概述 基于小程序开发的列表加载更多例子。 详细 一、前言 基于小程序开发的列表加载更多例子。 二、运行效果 运行效果&#xff08;演示的小视频&#xff0c;点击播放即可&#xff09; 三、实现过程 总体思路如何&#xff1a; 1、通过scroll-view组件提供的bindscroll方法…...

数据库知识

怎么做 常见的数据库 Oracle Mysql SOLSever Navicat &#xff08;新版可以链接mysql oracle&#xff09; http://sqlfiddle.com/ 数据库操作在线练习 mysql自带四个数据库 数据库语言的使用 显示数据库&#xff1a;show databases&#xff1b; 创建数据库&#xff1a;…...

VUE 目录介绍

更新升级&#xff08;npm - i&#xff09;之后最终目录如下&#xff1a; total 1672 drwxr-xr-x 18 testrose staff 576 8 22 02:53 . drwxr-xr-x 24 testrose staff 768 8 22 02:50 .. -rw-r--r-- 1 testrose staff 402 8 22 02:52 .babelrc -rw…...

Selenium的基本使用

文章目录 引入一.选择元素的基本方法1.根据id 选择元素2.根据 class属性选择元素当元素有 多个class类型 时 3.根据 tag名 选择元素4.通过WebElement对象选择元素5.find_element 和 find_elements 的区别 二.等待界面元素出现1.隐式等待2.显示等待 三.操控元素的基本方法1.点击…...

数据结构-----树的易错点

1.树的度和m叉树 •度为m的树&#xff08;度表示该结点有多少个孩子&#xff08;分支&#xff09;&#xff09; 任意结点的度<m(最多m个孩子) 至少又一个结点度m(有m个孩子) 一定是非空树&#xff0c;至少有m1个结点 •m叉树 任意结点的度<m(最多有m个孩子) 允许所…...

写之前的项目关于使用git remote -v 找不到项目地址的解决方案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、报错解析1. 报错内容2. 报错翻译3. 报错解析&#xff08;1&#xff09;使用git branch来查看git仓库有几个分支&#xff08;2&#xff09;使用git remote -v&am…...

STM32 F103C8T6学习笔记9:0.96寸单色OLED显示屏—自由取模显示—显示汉字与图片

今日学习0.96寸单色OLED显示屏的自由取模显示: 宋体汉字比较复杂&#xff0c;常用字符可以直接复制存下来&#xff0c;毕竟只有那么几十个字母字符&#xff0c;但汉字实在太多了&#xff0c;基本不会全部放在单片机里存着&#xff0c;一般用到多少个字就取几个字的模&#xff…...

直播平台源码搭建协议讲解篇:传输控制协议TCP

简介&#xff1a; 由于直播平台在当今时代发展的越来越迅速&#xff0c;使得直播平台的技术功能越来越智能&#xff0c;让用户在直播平台中能够和其他用户进行实时互动&#xff0c;让用户可以获取到全世界最新的资讯&#xff0c;让一些用户可以作为主播获得工作&#xff0c;让…...

中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题

最近研究搜索引擎、知识图谱和Python爬虫比较多&#xff0c;中文乱码问题再次浮现于眼前。虽然市面上讲述中文编码问题的文章数不胜数&#xff0c;同时以前我也讲述过PHP处理数据库服务器中文乱码问题&#xff0c;但是此处还是准备简单做下笔记。方便以后查阅和大家学习。 …...

基于Jenkins自动打包并部署Tomcat环境

目录 1、配置git主机 2、配置jenkins主机 3、配置web主机 4、新建Maven项目 5、验证 Jenkins 自动打包部署结果 Jenkins 的工作原理是先将源代码从 SVN/Git 版本控制系统中拷贝一份到本地&#xff0c;然后根据设置的脚本调用Maven进行 build&#xff08;构建&#xff09;。…...

开利网络受邀参与御盛马术庄园发展专委会主题会议

近日&#xff0c;开利网络受邀参与深度合作客户御盛马术庄园组织的首届发展专委会主体会议&#xff0c;就马术庄园发展方向进行沟通&#xff0c;数字化也是重要议题之一。目前&#xff0c;御盛马术庄园已经完成数字化系统的初步搭建&#xff0c;将通过线上线下相结合的方式搭建…...

【HarmonyOS北向开发】-05 ArkTS开发语言-ArkTS开发实践

...

无类别域间路由(Classless Inter-Domain Routing, CIDR):理解IP网络和子网划分(传统的IP地址类ABCDE:分类网络)

文章目录 无类别域间路由&#xff08;CIDR&#xff09;&#xff1a;理解IP网络和子网划分引言传统的IP地址类关于“IP地址的浪费” IP地址与CIDRIP地址概述网络号与主机号CIDR记法&#xff08;网络 网络地址/子网掩码&#xff09;网络和广播地址 CIDR的优势减少路由表项缓解IP…...

合宙Air724UG LuatOS-Air LVGL API-概念

概念 在 LVGL 中&#xff0c;用户界面的基本构建块是对象。例如&#xff0c;按钮&#xff0c;标签&#xff0c;图像&#xff0c;列表&#xff0c;图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性&#xff1a; Position (位置) Size (尺寸) Parent (父母) Cli…...

【C语言】位段,枚举和联合体详解

目录 1.位段 1.1 什么是位段 1.2 位段的内存分配 1.3 位段的跨平台问题 2.枚举 2.1 枚举类型的定义 2.2 枚举的优点 3. 联合&#xff08;共用体&#xff09; 3.1 联合类型的定义 3.2 联合的特点 3.3 联合大小的计算 1.位段 1.1 什么是位段 位段的声明和结构体是类…...

python学习-文件管理

文件管理 shutil 文件拷贝 shutil.copy(src,dst) 注&#xff1a;srcrE:\python\.vscode\文件操作 windows上运行时候&#xff0c;如果不加r&#xff0c;上述文件路径在代码运行时会报错&#xff0c;因为其会先将双引号”“去掉&#xff0c;然后系统看到了文件路径中有\nc&…...

【LeetCode 算法】Number of Ways of Cutting a Pizza 切披萨的方案数-记忆化

文章目录 Number of Ways of Cutting a Pizza 切披萨的方案数问题描述&#xff1a;分析代码递归 Tag Number of Ways of Cutting a Pizza 切披萨的方案数 问题描述&#xff1a; 给你一个 rows x cols 大小的矩形披萨和一个整数 k &#xff0c;矩形包含两种字符&#xff1a; A…...

机器视觉之光流

光流&#xff08;Optical Flow&#xff09;是计算机视觉领域的一个重要概念&#xff0c;用于描述图像中物体的运动模式。光流可以用来跟踪图像中物体的运动&#xff0c;检测运动中的物体&#xff0c;或者在机器视觉任务中估计物体的速度和位移。 光流的基本思想是根据图像像素…...

C++:list使用以及模拟实现

list使用以及模拟实现 list介绍list常用接口1.构造2.迭代器3.容量4.访问数据5.增删查改6.迭代器失效 list模拟实现1.迭代器的实现2.完整代码 list介绍 list是一个类模板&#xff0c;加<类型>实例化才是具体的类。list是可以在任意位置进行插入和删除的序列式容器。list的…...

深度学习基础知识-pytorch数据基本操作

1.深度学习基础知识 1.1 数据操作 1.1.1 数据结构 机器学习和神经网络的主要数据结构&#xff0c;例如 0维&#xff1a;叫标量&#xff0c;代表一个类别&#xff0c;如1.0 1维&#xff1a;代表一个特征向量。如 [1.0&#xff0c;2,7&#xff0c;3.4] 2维&#xff1a;就是矩…...

Springboot使用QueryDsl实现融合数据查询

SpringbootQueryDsl技术 1、添加依赖 <!--基于JPA--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!--QueryDSL支持--> <dependenc…...

解决方案 | 电子签打通消费电子行业数智化经营通路

技术迭代不断驱动产业快速增长&#xff0c;从PC电脑到手机平板、再到可穿戴设备的兴起&#xff0c;每一次设备的迭代都代表着技术为产品注入了新的发展动能。与此同时&#xff0c;消费电子设备迭代更新周期的不断缩短&#xff0c;市场增长疲缓等因素&#xff0c;也对行业的流转…...

JVM理论知识

一、JVM内存结构 java的内存模型主要分为5个部分&#xff0c;分别是&#xff1a;JVM堆、JVM栈、本地栈、方法区还有程序计数器&#xff0c;他们的用途分别是&#xff1a; JVM堆&#xff1a;新建的对象都会放在这里&#xff0c;他是JVM中所占内存最大的区域。他又分为新生区还…...

idea - 报错 Mybatis提示Tag name expected的问题< 小于号 无法识别

问题&#xff1a;Mybatis提示Tag name expected 原因&#xff1a; 当我们在mapper中编写sql语句的时候会发现使用"<“符号会提示一个Tag name expected。这是因为xml文件中不识别”<"符号和“&”符号。防止与xml本身的元素命名混淆&#xff0c;导致无法解…...

合宙Air724UG LuatOS-Air LVGL API--对象

对象 概念 在 LVGL 中&#xff0c;用户界面的基本构建块是对象。例如&#xff0c;按钮&#xff0c;标签&#xff0c;图像&#xff0c;列表&#xff0c;图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性&#xff1a; Position (位置) Size (尺寸) Parent (父母…...

怎么做网站首页关键词/二级子域名ip地址查询

全球同服貌似最近讨论比较热烈&#xff0c;下边是个人的一些拙见。 先上AGA的加速原理图 AGA实际上就是提供一个任播地址&#xff0c;它实现了以下几点&#xff1a; 1. 无论从全球哪个点去ping&#xff0c;延迟都是非常低的。 例如&#xff1a; 从香港到AGA 从美西到AGA …...

求邯郸网站制作/网店培训骗局

好的参考&#xff1a;https://linux.cn/article-4302-1.html http://darkdust.net/files/GDB%20Cheat%20Sheet.pdf 1&#xff09;加 -g 了吗&#xff1f; 首先请确保在编译时加上了-g 如果出现找不到*.cpp文件等错误&#xff0c;一般是没有正确添加 -g 选项。 2&#xff…...

武汉专业做网站/怎么才能让百度收录网站

我们有时可能需要在Java类中调用Servlet从而实现某些特殊的功能&#xff0c;在JavaAPI中提供了一个URL的类&#xff0c;其中openStream()方法可以打开URL的连接&#xff0c;并返回一个用于该连接读入的InputStream。二、Java中调用servlet应用举例&#xff1a;package com.soli…...

旅游网站设计的目的/深圳市企业网站seo营销工具

日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯 的一个。以下为4个嫌疑犯的供词。 A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff1a;C在胡说 已知3个人说了真话&#xff0c;1个人说的是假话。 现在请根据这些…...

wordpress常用代码/上海做网站优化

背景&#xff1a; 最近从某个数据网站获取到一份关于公司诉讼案件的数据表&#xff0c;在这里和大家分享一下我的分析方法。 数据清洗&#xff1a; 首先我们看一下数据信息&#xff0c;在这里我们需要以时间列作为索引&#xff0c;并把不需要的数据进行删除。 data pd.rea…...

免费下载高清图片素材的网站/关于普通话的手抄报

本文框架如下 第一部分&#xff0c;主要是在阅读代码过程中的日志和笔记&#xff1b; 第二部分&#xff0c;主要介绍了 Redis 的主要框架&#xff0c;以及 Redis 是如何提供服务的&#xff0c;从一个最简单的命令开始讲起&#xff1b; 第三部分&#xff0c;主要介绍 Redis 底…...