基于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验证码识别
Jan 25 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
详解python里的命名规范
Jul 16 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 Python
对django views中 request, response的常用操作详解
Jul 17 Python
python requests指定出口ip的例子
Jul 25 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
python实现打砖块游戏
Feb 25 Python
python 中的jieba分词库
Nov 23 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
Admin generator, filters and I18n
2011/10/06 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
PHP生成唯一订单号
2015/07/05 PHP
33道php常见面试题及答案
2015/07/06 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
javascript 运算数的求值顺序
2011/08/23 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
python用post访问restful服务接口的方法
2018/12/07 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
django配置app中的静态文件步骤
2020/03/27 Python
flask开启多线程的具体方法
2020/08/02 Python
python 实现简易的记事本
2020/11/30 Python
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
管理标语大全
2014/06/24 职场文书
关爱残疾人标语
2014/06/25 职场文书
物理课外活动总结
2014/08/27 职场文书
商场父亲节活动方案
2014/08/27 职场文书
本溪关门山导游词
2015/02/09 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
导游词之峨眉山
2019/12/16 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android