python快速对比两个excel的数据是否一致

  • 功能概述
  • 导入包
  • 封装函数
  • 程序开始

功能概述

两个sheet里面的表头有部分不一致,但是数据对应的内容是一致的,因此需要匹配表格多的值是否一致。
输出两个对比的表格,不一致的地方采用高亮背景色做了区分。
刚开始学习使用python自动化办公,写的不够好可能还存在问题,欢迎交流学习。

导入包

import pandas as pd
#import numpy as np  #有的版本不加numpy不可以用pandas
import openpyxl as vb
import operator as op
import operator
from openpyxl.styles import PatternFill
from openpyxl.styles import colors
from openpyxl.styles import Font

封装函数

# 封装函数1:得到特表列表
def get_p_header_list(table_path,title):p_header_list = []workbook = vb.load_workbook(table_path)sheet_names = workbook.sheetnames    for sheet_name in sheet_names:my_sheet = workbook[sheet_name]sheet_names = workbook.sheetnamescell = my_sheet.cell(1,1).valueif not op.contains(cell,title):p_header_list.append(sheet_name)return(p_header_list)# 封装函数2:定义header,特殊sheet表取hander
def get_header(sheet_name,p_header_list):
#    my_sheeta = workbook_a[sheet_name]
#    c = my_sheeta.cell(1,1).valueif sheet_name in p_header_list :header = 0     # 三个特殊汇总表else :header = 1     # 工资表return header# 封装函数3:根据表的名字和需要删除的表头的列表,得到所需要的对比的col_lists列表
def get_col_lists(table_path,sheet_name,col_drops=[],p_header_list=[]):col_lists = []
#    sheet_name = str(sheet_name)workbook = vb.load_workbook(table_path)my_sheet = workbook[sheet_name]maxcol = my_sheet.max_column     # 最大列if sheet_name in p_header_list:header = get_header(sheet_name,p_header_list) + 1for i in range(header,maxcol+1):c = my_sheet.cell(1,i).value  # 特殊表表头  表头在第一行if c not in col_drops:  if  c != None:col_lists.append(c) else :for i in range(1,maxcol+1):header = get_header(sheet_name,p_header_list) + 1d = my_sheet.cell(header,i).value  # 表表头 # 获取表头,默认表头在第二行,并确定表头是否完整,去除不要的列if d not in col_drops:  if  d != None:col_lists.append(d)return(col_lists)# 封装函数4 ,表路径、sheet在工作簿中的位置或者是名字、表头所在位置(第几行)、所需表头字段的列表集合。返回一个df对象
def takecol(table_path,sheet_name,title,col_drops):p_header_list = get_p_header_list(table_path,title)col_lists = get_col_lists(table_path,sheet_name,col_drops,p_header_list)header = get_header(sheet_name,p_header_list)df = pd.read_excel(table_path,sheet_name = sheet_name,# 读取哪⼀个Excel中⼯作表,默认第⼀个header = header,# 使⽤第⼀⾏数据作为列索引#names = list('ABCDE'),# 替换⾏索引#index_col=1)# 指定⾏索引, B作为⾏索引
#    print(sheet_name) #调试用 查看sheet名字df1 = df.loc[:,col_lists]
#    df1 = df[col_lists]return(df1)
# eg:takecol('table1(20年6月-21年12月)(a).xlsx','21年1月','工作簿A',col_lists)# 封装函数5 ,清洗后的工作簿输出(title剔除、列剔除然后保存,默认新保存文件名已经写死)
def wb_to_excel(table_path,title,col_drops):dic = {}#1、读取工作表workbook = vb.load_workbook(table_path)#2、获取原来的所有sheet名字sheet_names = workbook.sheetnamesfor sheet_name in sheet_names:sheet_name = str(sheet_name)df = takecol(table_path,sheet_name,title,col_drops)dic[sheet_name] = dfkey_ls = [*dic]# 获取所有字典的key值列表(一个key对应一个sheetname)with pd.ExcelWriter('./diff-' + table_path) as writer:for sheet_name in key_ls:df = dic[sheet_name]df.to_excel(writer,sheet_name=sheet_name,index = False)# 封装函数6 ,对比两个表格的数据 不同的用颜色标记出来
def datas_diff(sheet_a,sheet_b):maxrow = sheet_a.max_rowmaxcol = sheet_a.max_columnfor i in range(1,maxrow+1):for j in range(1,maxcol+1):cell_a = sheet_a.cell(i,j)cell_b = sheet_b.cell(i,j)if cell_a.value != cell_b.value:cell_a.fill = PatternFill('solid',fgColor='FFFF00')cell_a.font = Font(color=colors.BLUE,bold=True)cell_b.fill = PatternFill('solid',fgColor='FFFF00')cell_b.font = Font(color=colors.BLUE,bold=True)

程序开始

# 代码开始:
# 参数如下:#1预读取工作簿
#workbook_a = vb.load_workbook(r'table1(20年6月-21年12月)(a).xlsx')
#workbook_b = vb.load_workbook(r'table2(20年6月-22年3月)(b).xlsx')#1、清洗table1数据
table_patha = 'table1(20年6月-21年12月)(3.7吴双).xlsx'
title = '合并单元格表头' # 不需要的表头,合并单元格只读取cell(1,1)
col_drops = ['序号','公司平台工号'] #不需要的列
wb_to_excel(table_patha,title,col_drops)#2、清洗table2数据
table_pathb = 'table2(20年6月-22年3月)(b).xlsx'
title = '合并单元格表头' # 不需要的表头,合并单元格只读取cell(1,1)
col_drops = ['序号','公司平台工号'] #不需要的列
wb_to_excel(table_pathb,title,col_drops)#3读取清洗后的工作簿
table_patha_new = './diff-' + table_patha
table_pathb_new = './diff-' + table_pathb
workbook_a = vb.load_workbook(table_patha_new)
workbook_b = vb.load_workbook(table_pathb_new)#4、 开始对比
anames = workbook_a.sheetnames
bnames = workbook_b.sheetnamesfor aname in anames:if True :sheet_a = workbook_a[aname]sheet_b = workbook_b[aname]datas_diff(sheet_a,sheet_b)else :print('sheet错误')
print('对比完成')   #5、 结果输出
workbook_a.save('table1_diff_python.xlsx')
workbook_b.save('table2_diff_python.xlsx')

python快速对比两个excel的数据是否一致相关推荐

  1. 超实用!使用Python快速对比两个Excel表格之间的差异

    这是「活用数据」的第 11 篇原创文章 主要介绍如何通过DeepDiff实现两个Excel文件数据的快速对比. 对于日常办公中需要处理数据的同学来说,有时候需要对比两个Excel表格(或者是数据库)的 ...

  2. Python实现对比两个Excel数据内容并标出不同

    导读 日常工作中需要对比两个Excel工作表中的数据差异是很不方便的,使用python来做就比较简单了!本文为大家介绍了python实现对比两个Excel的数据内容并标记出不同数据的示例代码,需要的可 ...

  3. 快速对比两张工作表数据差异——《超级处理器》应用

    如何快速对比两个工作表数据差异?比如,有下面两张表,一张是审核前的,一张是审核后的,怎么快速找出两张表中不同的单元格. 生产报表审核后 生产报表审核前 我们很难一眼看出两个表的差异,我们用超级处理器来 ...

  4. 【Python数据分析】利用Python快速对两个EXCEL表格进行内容比较并找出差异

    如何快速找到两个EXCEL表格的数据差异?今天就与大家分享如何利用Python数据分析3分钟搞定,不管EXCEL表格有多少行数据,代码总是那么几行.不多说了,上案例(文末附Python数据分析案例下载 ...

  5. Java对比两张Excel表的数据,java对比两个excel或者一张excel和数据库的一张表的数据是否相同,两张excel表格匹配相同的数据库...

    excel自动从数据库匹配相应的数据 vlookup函数:vlookup(lookup_value,table_array,col_index_num,[range_lookup]) 第一个:look ...

  6. python图像对比_用python实现对比两张图片的不同

    from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two, diff_save_lo ...

  7. python打开excel窗口_简单介绍python在CMD界面读取excel所有数据

    这篇文章主要介绍了python在CMD界面读取excel所有数据,帮助大家更好的利用python办公,感兴趣的朋友可以了解下 代码 import xlrd import os from prettyt ...

  8. 对比两张表的数据并筛选出数据不同的

    描述: 表A和表B的主键A1和B1是相同的,现在需要A2和B2比较,A3和B3比较,将A2不等于B2和A3不等于B3的数据从表A中筛选出来.这样的SQL语句怎么写? SQL语句对比两张表的数据并筛选出 ...

  9. python美化excel_简单介绍python在CMD界面读取excel所有数据

    这篇文章主要介绍了python在CMD界面读取excel所有数据,帮助大家更好的利用python办公,感兴趣的朋友可以了解下 代码 import xlrd import os from prettyt ...

最新文章

  1. 中国平安“豪赌”科技?从产险业务IT变形计聊起
  2. C语言如何产生随机数
  3. python 新闻分析系统 源码_python 源码分析之类型系统
  4. 最优化学习笔记(六)——牛顿法性质分析
  5. z-index在IE中的迷惑
  6. Myrrix——基于Mahout的开源推荐系统
  7. 自定义控件的构建(6)
  8. IT十八掌掌第十一天课程总结
  9. uni-app 启动页控制
  10. 北大邹磊:图数据库中的子图匹配算法
  11. 逻辑地址与物理地址的转换
  12. 更好地提问ChatGPT_常用prompt表
  13. Smartbi自定义生成报表-制作流程
  14. Flutter环境配置基本语法如何使用库
  15. linux avg 强力卸载,彻底卸载AVG维护清理软件
  16. PVM58N-YY1AGR0BN-1213光电采样编码器
  17. bzoj1305【CQOI2009】dance 跳舞
  18. jython mysql_Jython中链接Oracle数据库
  19. 跨时钟域信号处理---脉冲同步器详解
  20. 一文讲懂召回中的 NCE NEG sampled softmax loss

热门文章

  1. 戴尔霄龙服务器销售商,搭载AMD EPYC“霄龙”处理器:DELL 戴尔 发布 EMC PowerEdge R7415 、R7425 和 R6415 服务器...
  2. 中科协发布2022“科创中国”开源创新榜 OceanBase开源社区入选
  3. eclipse建立Flex项目之Blazeds篇1(测试成功完整版)
  4. 定积分的特殊计算方法
  5. android7 隐藏图标,华为nova7怎么隐藏桌面图标?华为nova7隐藏桌面图标教程
  6. Andorid.bp文件和Anorid.rc文件入门
  7. 基于springboot与layui的防疫物资管理管理系统
  8. 扩展欧几里得算法求逆元c语言,关于扩展欧几里得算法和逆元
  9. 模块DIY——基于DDS直接数字频率合成技术自制的可编程任意波形发生器模块(DDS原理、寄存器解读、原理图设计、驱动程序-适用于AD9833/AD9834/AD9838)
  10. 帆软填报通过JS清空数据库表