基于Python实现对比Exce的工具


Posted in Python onApril 07, 2022

目的:设计一个应用GUI用于对比两个Excel文件

思路

1.参数

  • 同一个excel文件两个sheet页其中一个ODS(老数据),一个DWH(新数据)
  • 生成对比文件
  • 设计两个主键 输入主键1 输入主键2

(默认新旧文件列名一致)

2.效果

  • 生成的文件
  • 数据量一样、取每个字段不一致的数据前10
  • 数据量不一样、取两边不一样的数据前10、排除不一样的数据、每个字段不一致的数据前10

3.实现

  • 循环对比组合列(主键+对比列)
  • pandas处理差异数据、openpyxl 处理生成的sheet的数据格式. (先生成数据,然后调整格式)

配置

import pandas as pd
from openpyxl import load_workbook
#选择文件路径
path=r"C:\Users\小管同学\Desktop\Migration_Data_Compari\对比文件.xls" #input("选择文件路径:")
TargetPath=r"C:\Users\小管同学\Desktop\Migration_Data_Comparison_Tool\目标文件\对比结果.xlsx"
DATA_ODS=pd.read_excel(r"C:\Users\小管同学\Desktop\Migration_Data_Comparison_Tool\对比文件.xls",sheet_name="ODS")
DATA_DWH=pd.read_excel(r"C:\Users\小管同学\Desktop\Migration_Data_Comparison_Tool\对比文件.xls",sheet_name="DWH")
#选择主键
Primarykey="员工编号"#input("选择主键1:")
Primarykey
# 员工编号

一、数据量

输出表格1–数据量

def write_to_excel_DataVolume(Data,TargetPath): # cor_df 为要保存的 dataframe 
    writer = pd.ExcelWriter(TargetPath, engine='xlsxwriter') # 这里用
    Data.to_excel(writer,sheet_name='Sheet1', encoding='utf8', header=False, startcol=0, startrow=2) # 把dataframe的数据从第2行开始
    workbook  = writer.book
    
    format1 = workbook.add_format({ # 先把样式打包,然后之后赋值即可
        'bold': True, # 字体加粗
        'text_wrap': True, # 是否自动换行
        'valign': 'bottom',  #垂直对齐方式
        'align': 'center', # 水平对齐方式
        'fg_color': '#C5D9F1', # 单元格背景颜色
        'border': 1,# 边框
    })    
    writer_sheet = writer.sheets['Sheet1']
    # 设置宽度
    writer_sheet.set_column("A:I", 16)
    writer_sheet.set_column('C:C',30)
    writer_sheet.merge_range(0,0,0,2,'对比结果',format1)
    writer_sheet.merge_range(4,2,4,0,'数据量差异',format1)
    writer_sheet.write(1,0,'',format1)
    writer_sheet.write(1,1,'ODS',format1)
    writer_sheet.write(1,2,'DWH',format1)
    writer.save()
    writer.close()
DataFrame_DataVolume=pd.DataFrame([[DATA_ODS.shape[0]],[DATA_DWH.shape[0]]]).T
DataFrame_DataVolume.columns =["ODS","DWH"]
DataFrame_DataVolume.index=["数据量"]
DataFrame_DataVolume
#writeFileDataVolume(DataFrame_DataVolume,TargetPath)
write_to_excel_DataVolume(DataFrame_DataVolume,TargetPath)

基于Python实现对比Exce的工具

输出表格2–数据量差异合同

if DATA_ODS.shape[0]==DATA_DWH.shape[0]:
    pass
else:
    
    DATA_ODS_Primarykey=pd.DataFrame(DATA_ODS[Primarykey])
    DATA_DWH_Primarykey=pd.DataFrame(DATA_DWH[Primarykey])
    df_union = pd.concat([DATA_ODS_Primarykey,DATA_DWH_Primarykey])
    # 实现1
    df_diff_ODS = df_union.append(DATA_ODS_Primarykey).drop_duplicates(subset=df_union.columns.to_list(), keep=False)
    df_diff_DWH = df_union.append(DATA_DWH_Primarykey).drop_duplicates(subset=df_union.columns.to_list(), keep=False)
    #DWH多的合同
    df_diff_ODS
    #DWH少的合同
    df_diff_DWH
    df_diff_DWH_Data=[]
    df_diff_ODS_Data=[]
    for i in df_diff_ODS.head(10).values.tolist():
        for n in i:
            df_diff_ODS_Data.append(n)
            
    for i in df_diff_DWH.head(10).values.tolist():
            df_diff_DWH_Data.append(n)
    while True:
        if len(df_diff_DWH_Data)>len(df_diff_ODS_Data):
            df_diff_ODS_Data.append("-")
        elif len(df_diff_DWH_Data)< len(df_diff_ODS_Data):
            df_diff_DWH_Data.append("-")
        elif len(df_diff_DWH_Data)== len(df_diff_ODS_Data):
            break
    DataFrame_DataVolume_Count_result=pd.DataFrame(df_diff_DWH_Data,df_diff_ODS_Data).reset_index()
    DataFrame_DataVolume_Count_result.columns=['DWH多的合同','DWH少的的合同']
    DataFrame_DataVolume_Count_result=DataFrame_DataVolume_Count_result.reset_index()
    DataFrame_DataVolume_Count_result.columns=['序号','DWH多的合同','DWH少的的合同']
DataFrame_DataVolume_Count_result
from openpyxl import load_workbook
 
def write_to_excel_Count_result(Data,TargetPath):
    df_Old = pd.DataFrame(pd.read_excel(TargetPath)) #读取原数据文件和表 
    writer = pd.ExcelWriter(TargetPath,engine='openpyxl')
    book=load_workbook(TargetPath)
    writer.book = book
    writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
    df_rows = df_Old.shape[0] #获取原数据的行数
    Data.to_excel(writer,startrow=df_rows+1, index=False,startcol=0,header=True)#将数据写入excel中的aa表,从第一个空行开始写
    writer.save()#保存
write_to_excel_Count_result(DataFrame_DataVolume_Count_result,TargetPath)

基于Python实现对比Exce的工具

到此这篇关于基于Python实现对比Excel的小工具 【实现中】的文章就介绍到这了,更多相关Python对比Excel的小工具内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python字符串排序方法
Aug 29 Python
python函数装饰器用法实例详解
Jun 04 Python
Python内置函数OCT详解
Nov 09 Python
python pandas 对series和dataframe的重置索引reindex方法
Jun 07 Python
一百多行python代码实现抢票助手
Sep 25 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
python logging.info在终端没输出的解决
May 12 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
Aug 05 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Python OpenCV之常用滤波器使用详解
python Tkinter模块使用方法详解
一行Python命令实现批量加水印
Apr 07 #Python
Python中Matplotlib的点、线形状、颜色以及绘制散点图
详解Python中*args和**kwargs的使用
Apr 07 #Python
Python列表的索引与切片
Apr 07 #Python
You might like
安装docker和docker-compose实例详解
2019/07/30 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
javascript 写类方式之一
2009/07/05 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
Python实现LRU算法的2种方法
2015/06/24 Python
Zabbix实现微信报警功能
2016/10/09 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
python实现QQ批量登录功能
2019/06/19 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
Python处理session的方法整理
2019/08/29 Python
Python: 传递列表副本方式
2019/12/19 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
美术指导求职信
2014/03/17 职场文书
优秀教师申报材料
2014/12/16 职场文书
投标售后服务承诺书
2015/04/29 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
繁星春水读书笔记
2015/06/30 职场文书
感恩教师节主题班会
2015/08/12 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS