基于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中实现定制类的特殊方法总结
Sep 28 Python
简单的Python的curses库使用教程
Apr 11 Python
python读取excel表格生成erlang数据
Aug 26 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
Sep 22 Python
使用DataFrame删除行和列的实例讲解
Apr 08 Python
Python paramiko模块的使用示例
Apr 11 Python
Python 数据处理库 pandas进阶教程
Apr 21 Python
Python imageio读取视频并进行编解码详解
Dec 10 Python
利用Python脚本实现自动刷网课
Feb 03 Python
基于FME使用Python过程图解
May 13 Python
python3爬虫中异步协程的用法
Jul 10 Python
Pytorch DataLoader shuffle验证方式
Jun 02 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
发挥语言的威力--融合PHP与ASP
2006/10/09 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
详解ES6中的let命令
2020/04/05 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
python 正则式使用心得
2009/05/07 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
QML使用Python的函数过程解析
2019/09/26 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
new修饰符是起什么作用
2015/06/28 面试题
大学生个人简历中的自我评价
2013/12/27 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
119消防日活动总结
2014/08/29 职场文书
2014年施工员工作总结
2014/11/18 职场文书
数学教师个人总结
2015/02/06 职场文书
电影开国大典观后感
2015/06/04 职场文书
决心书格式范文
2015/09/23 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android