注:由于我不是做专业数据处理的,懂得也不多,所以编写的python代码都是简单易懂的,如果存在bug或者有更好的实现方法,欢迎各位大佬指出!!!

前段时间,测试小白我接到了老大的新活,比对mysql数据库和Excel源表。虽然数据测试这块我确实没接触过,但是本着咱就是块砖的原则,哪里需要往哪搬,那就火速开干呗。

一开始打算用Python连接读取数据库,再读取Excel表来比对数据的方案,奈何数据库我又没有权限,只有一个可视化数据库Metabase的导出权限。我捣鼓了一下,Metabase导出json格式数据是没问题的,于是就变成了Excel表和json数据比对。

那么方向定好了,接下来该怎么比对呢?(陷入沉思...)

既然用python比对,那么首先得转换成相同数据类型,才好比对,那么初步方案就是将Excel和json读取后,都转成列表中嵌套多个字典类型数据,也就是[{},{},{}...]这样的格式数据。

首先是读取Excel数据,将其转成[{},{},{}...]格式,下图是实现后输出。

以下是代码实现思路:

"""@功能:用于读取Excel中数据,并将其转换为[{},{},{}...]
"""# 根据excel路径及 sheet页名称将对应的sheet页内容读入到字典中
def read_excel_into_list(excel_file_path, sheet_name):# 1、根据excel路径将数据读入到工作薄中(读入内存)work_book = file_read_write_utils.read_from_excel(excel_file_path)# 2、将对应的sheet页内容读入到字典中sheet = work_book.sheet_by_name(sheet_name)return convert_sheet_context_into_list(sheet, sheet_name)# 将对应的sheet页内容读入到字典中
def convert_sheet_context_into_list(sheet, sheet_name):fld_key_list = []fld_val_list = []new_val_list = []new_val_list2 = []for col_index in range(sheet.nrows):for row_index in range(sheet.ncols):# 将栏位名称存入fld_key_listfld_key_list.append(sheet.cell_value(0, row_index))# 将第二行及之后栏位值存入fld_value_listif col_index >= 1:fld_val_list.append(sheet.cell_value(col_index, row_index))if col_index >= 1:dict1 = dict(zip(fld_key_list, fld_val_list))new_val_list.append(dict1)if sheet_name == 'XXXX':for table in new_val_list:new_val_list2.append(table)i = table_none_format(new_val_list2)print(f'共{i}行')# print("根据Excel表格读取到的列表为: \n" + str(new_val_list2))return new_val_list2

接下来是读取json数据,将其转成[{},{},{}...]格式,下图是实现后输出。

以下是代码实现思路:


import json
import osimport xlrd2
import xlwt
from xlutils.copy import copy# 将json文件对象中的数据直接转换成 Python 列表
def read_from_json(json_file_path, model, char_set):i = 0if '' == json_file_path.strip():json_file_path = json_file_pathif '' == char_set.strip():char_set = "UTF-8"if '' == model.strip():model = "r"with open(json_file_path, model, encoding=char_set) as f:json_data = json.load(f)for table in json_data['data']:i += 1# print("根据json报文读取到的列表为:\n" + str(json_data['data']))print(f"共{i}行")   return json_data['data']

那么读取完数据后,接下来就是对同一数据类型的数据进行比对。由于我的两组数据没有唯一主键,所以在比对过程中,我通过数据中每个字典的两个或多个关键字段来标识唯一性(由于数据建模时,两个或多个关键字段可标识该条数据的唯一性,具体需要看实际项目数据情况~~),下图是实现后输出。

以下是代码实现思路:

"""@功能:比较两个列表中的字典是否相同注意:1、由于比对的mysql表精度和Excel精度可能存在差异,需要在之前进行数据处理
"""def compare_all_different(list1, list2):diff = []i = 0a = 0print("开始比较list1(表格读取) 和 list2(json读取) 的所有差异:")# 首先判断Excel 和 json 数据总数是否一致if count(list1) != count(list2):print("表格数据总数和json数据总数对应不上!")else:# 其次获取list1中的一条字典数据,再获取list2中对应的一条字典数据,进行两条字典数据的比对for dict1 in list1:year = dict1['年份']  # 年份province_name = dict1['地区']  # 地区gdp = dict1['gdp']  # gdpgdp_person = dict1['gdp_person'] # gdp_person# 通过一个字段标志另一个列表中的唯一字典dict2 = get_dict_wih_same_key(new_list1=[year, province_name, gdp, gdp_person], list2=list2)# 接下来就是两条字典数据比对try:differ = set(dict1.items()) ^ set(dict2.items())a += 1if len(differ) != 0:i += 1print(f"【{i}】--\ndict1(表格读取):\n{dict1}\ndict2(json读取):\n{dict2}\n相同关键字的栏位取值有差异,差异是:{differ}")for item in list(differ):diff.append(item)else:# i += 1# print(f"第{i}行数据比对一致")passexcept AttributeError:passprint(a)return diffdef get_dict_wih_same_key(new_list1, list2):i = 0for dict2 in list2:if dict2['年份'] == new_list1[0] and dict2['地区'] == new_list1[1]:return dict2def count(list3):i = 0for table in list3:i += 1return i

以上就是测试小白我的小小拙见啦,新的一年,希望各位事事顺心哦~~

python比对Excel表和json数据相关推荐

  1. Python xlrd将excel表的指定数据copy到另一个excel表格中

    要复制excel表的内容: 分别在第15.16.17.18.19列 第二张的excel表格: 代码部分: import xlrd from datetime import datetime from ...

  2. Python提取多张excel表上的数据,合并汇总到一张新表

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于财会学习联盟,作者:我是刀哥啊 私信回复"资料" ...

  3. Python办公自动化实践1:从多个excel表中提取数据并汇总到一个工作表页中,表格,抽取,sheet

    Python办公自动化实践1:从多个excel表中提取数据并汇总到一个工作表页中,表格,抽取,sheet 发表时间:2020-04-26 问题:从当前目录或子目录中查询符合条件的excel表格,并从这 ...

  4. 《python 数据可视化编程实战》-从excel表中读取数据

    从excel表中读取数据 #!/usr/nim/env python # _*_ coding:utf-8 _*_ import xlrd from numpy import *file1 = 'D: ...

  5. Python win32com 控制excel自动刷新保存数据并截图发送到企业微信

    Python win32com 控制excel自动刷新保存数据并截图发送到企业微信 业务需求 功能模块 爬虫 运行excel宏,刷新保存excel数据 指定区域截图 发送图片到企业微信 业务需求 每天 ...

  6. 在python中创建Excel文件并写入数据

    来源:<在python中创建Excel文件并写入数据> python中的包xlwt和xlsxwriter都是比较方便创建excel文件并写入数据的. xlwt中: 通过xlwt.Workb ...

  7. Python如何读取Excel表内容

    用python读取excel表中的数据 假如说有如下一张存储了数据的excel表,其中x1-x6是特征,y_label是特征对应的类别标签.我们想要使用python对以下数据进行数据分析,那么第一步就 ...

  8. html将excel数据自动导入到网页,如何把excel表中的数据自动输入到网页中

    怎么把excel表中的数据自动输入到网页中 因要给员工网上投工伤保险,员工资料在excel表中,现在在网上投保险时只能一笔笔的复杂粘贴到网页中,有没有办法能直接把excel表中的资料自动输入到网页中的 ...

  9. Excel自动转曲线图的时PHP,excel表格数据转为曲线-如何将EXCEL表中的数据生成曲线...

    excel数据表转化为曲线图 可以选择数据后击插入--图表--散点图--带平滑线点图 工具 Office 2007 方法: 1.打开EXCEL表格,选择数据,并点击"插入"--图表 ...

  10. JQuery从Excel表中获取数据添加到select下拉框多选的实现

    JS代码如下 function importf(excel) {var perids = [];//for循环遍历Excel表中的数据,取出需要的列for(var i = 0 ; i < exc ...

最新文章

  1. 海量java等互联网相关电子图书分享
  2. mysql控制台操作
  3. python pip的配置
  4. 如何使用PowerShell将VS Code扩展导出到另一台计算机
  5. 行车路途出现意外6个急救绝招
  6. IDEA控制台乱码终极解决方案
  7. 【重点 递归版】剑指offer——面试题16:反转链表
  8. 【学习笔记】常用的c/c++面试题
  9. 【优化求解】基于matlab粒子群与遗传算法混合算法求解切削参数优化问题(以成本和碳排放量为目标函数)【含Matlab源码 1619期】
  10. arduino下载库出错_关于程序下载到最后卡住了以及自带库不能用的问题!!
  11. C# 如何将一个PDF页面分割为两页或多页
  12. 解决win10小娜无法搜索本地应用程序
  13. 个人隐私保护条例_个人资料(隐私)条例
  14. 理论计算机科学奖项,厉害了!背景提升神奖——丘成桐计算机科学奖助你入藤校...
  15. 商品交易系统之---产品介绍
  16. 深耕DID,INTO钱包拿到进入Web3的钥匙
  17. Python Qt UI设计
  18. GAMES101-计算机图形学学习笔记-基本线性代数
  19. Android 11 修改重启和恢复出厂设置动画页面
  20. 数据处理-拉伸中的strain-stress曲线

热门文章

  1. Android开发-API指南-uses-feature(1)
  2. Android 高仿腾讯旗下app的 皮肤加载技术
  3. linux用户态和内核态堆栈,Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
  4. Merkle Tree、Merkle Proof、SPV安全性分析、Bloom过滤器
  5. FogROS2 使用 ROS 2 的云和雾机器人的自适应和可扩展平台
  6. 0602 信用卡防盗刷学习总结
  7. 计算机无线键盘没反应,电脑无线键盘没反应怎么回事
  8. 【CLP】Conic Linear Programming Duality
  9. 在计算机硬盘使用前需要做的工作是,工作电脑的硬盘该如何保养
  10. iOS 13越狱:越狱后如何安装AppSync和afc2越狱补丁