基于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登录好友QQ空间点赞的示例代码
Nov 04 Python
python中requests和https使用简单示例
Jan 18 Python
Python封装原理与实现方法详解
Aug 28 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
Nov 29 Python
Python求正态分布曲线下面积实例
Nov 20 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 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写的采集程序
2007/03/16 PHP
php中文字母数字验证码实现代码
2008/04/25 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
Python压缩和解压缩zip文件
2015/02/14 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
python入门之基础语法学习笔记
2020/02/08 Python
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
军训考核自我鉴定
2014/02/13 职场文书
主管竞聘书范文
2014/03/31 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
校园运动会广播稿
2014/10/06 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
杨善洲观后感
2015/06/04 职场文书
总经理聘用协议书
2015/09/21 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL