基于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实现控制台输入密码的方法
May 29 Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
python多线程与多进程及其区别详解
Aug 08 Python
python中68个内置函数的总结与介绍
Feb 24 Python
Python datetime模块使用方法小结
Jun 18 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
Aug 19 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
Python实战之实现简易的学生选课系统
May 25 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
php集成开发环境详解
2019/09/24 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
Add a Table to a Word Document
2007/06/15 Javascript
js查找父节点的简单方法
2008/06/28 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
three.js实现圆柱体
2018/12/30 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
详解django.contirb.auth-认证
2018/07/16 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
军训教官感言
2014/03/02 职场文书
房产买卖委托公证书
2014/04/04 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python