Python实现对比两个Excel数据内容并标记出不同
作者:Sir 发布时间:2022-01-26 09:42:50
标签:Python,对比,Excel,数据
日常工作中需要对比两个Excel工作表中的数据差异是很不方便的,使用python来做就比较简单了!
我们的思路是通过读取两个Excel的数据,采用逐个遍历对比同一个位置的两个单元格如果不是相同的则打上对应的标记,处理完成后再另存为Excel文件。
既然是对每个单元格的操作那肯定离不开openpyxl模块,没有的话使用pip的方式安装一下即可。
pip install openpyxl
接着我们准备读取两个需要对比的Excel数据内容,这里准备的是data1.xlsx和data2.xlsx作为源数据使用。
然后,将openpyxl模块及其所需要的样式填充/文字设置相关的对象导入。
# It imports the PatternFill class from the openpyxl.styles module.
from openpyxl.styles import PatternFill
# It imports the colors class from the openpyxl.styles module.
from openpyxl.styles import colors
# It imports the Font class from the openpyxl.styles module.
from openpyxl.styles import Font
# It imports the openpyxl module and renames it as pxl.
import openpyxl as pxl
下面使用openpyxl模块的load_workbook函数读取到Excel文件对象,并提取两个Excel文件中'Sheet1'工作表作为源数据。
# It loads the data1.xlsx file and assigns it to the workbook_1 variable.
workbook_1 = pxl.load_workbook(r'data1.xlsx')
# It loads the data2.xlsx file and assigns it to the workbook_2 variable.
workbook_2 = pxl.load_workbook(r'data2.xlsx')
# Assigning the Sheet1 object to the workbook_1_sheet_1 variable.
workbook_1_sheet_1 = workbook_1['Sheet1']
# It assigns the Sheet1 object to the workbook_2_sheet_1 variable.
workbook_2_sheet_1 = workbook_2['Sheet1']
提取两个工作表中的最大行和最大列,这样即使两个表的行数和列数不一致也能完全找出不同的单元格数据。
# A ternary operator. It is equivalent to:
max_row = workbook_1_sheet_1.max_row if workbook_1_sheet_1.max_row > workbook_2_sheet_1.max_row else workbook_2_sheet_1.max_row
# A ternary operator. It is equivalent to:
max_column = workbook_1_sheet_1.max_column if workbook_1_sheet_1.max_column > workbook_2_sheet_1.max_column else workbook_2_sheet_1.max_column
使用for循环的方式分别遍历行数据和列数据,然后判断对应单元格的数据值是否相等,若是不相等则打上标记。
for i in range(1, (max_row + 1)):
for j in range(1, (max_column + 1)):
cell_1 = workbook_1_sheet_1.cell(i, j)
cell_2 = workbook_2_sheet_1.cell(i, j)
if cell_1.value != cell_2.value:
cell_1.fill = PatternFill("solid", fgColor='FFFF00')
cell_1.font = Font(color=colors.BLACK, bold=True)
cell_2.fill = PatternFill("solid", fgColor='FFFF00')
cell_2.font = Font(color=colors.BLACK, bold=True)
最后将对比处理完成后的工作表对象使用save函数进行保存即可。
# It saves the workbook_1 object to the data3.xlsx file.
workbook_1.save('data3.xlsx')
# It saves the workbook_2 object to the data4.xlsx file.
workbook_2.save('data4.xlsx')
下面是通过对比差异化处理后的data3.xlsx和data4.xlsx的工作表数据。
从结果来看,即使是两个表的数据行数不一致也能对比出差异数据并打上了标记。
来源:https://mp.weixin.qq.com/s/I2AViJwf_d2IuQgcUq-Yag


猜你喜欢
- 第一个保存在新建一个文本中<% Dim Username,PassWord,strLogFile,f,ff,Str
- RPC是什么?所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,
- 故障描述percona5.6,mysqldump全备份,导入备份数据时报错Duplicate entry 'hoc_log99-it
- #!/usr/bin/python import os import time im
- 面试mysqldba的时候遇到一个题:描述msyql replication 机制的实现原理,如何在不停掉mysql主库的情况下,恢复数据不
- 前言最近遇到一个临时需求,需要将客户环境中一个服务每天的日志进行一系列复杂处理,并生成数据报表。由于数据处理逻辑复杂,且需要存入数据库,在客
- 目录Pyppeteer 是什么Pyppeteer能做什么截图导出PDF公众号链接导出PDF示例Pyppeteer 是什么介绍 Pyppete
- 市场上很多火车票抢票软件大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单。下面使用Python模拟抢票程序,给大
- 在urls.py文件中按照如下步骤写,即可正确使用DRF的内置路由.from .views import BookModel # 1. 导入
- 本文实例讲述了Flask框架各种常见装饰器。分享给大家供大家参考,具体如下:效果类似django的process_request的装饰器@a
- <script>alert(escape("人"));alert(encodeURI("人&quo
- EXCEL的数值排序功能还是挺强大的,升序、降序,尤其自定义排序,能够对多个字段进行排序工作。那么,在Python * 中,有没有这样强大的排
- 我们知道,当你把一个资源文件和一个.py文件放在一起的时候,你可以直接在这个.py文件中,使用文件名读取它。例如:with open(
- SQLServer数据库从高版本降级到低版本实例详解由于目前还广泛使用着SQLServer2000,很多公司又想使用新的SQLServer,
- 实例如下所示:#!/usr/bin/python# -*- coding: UTF-8 -*-import reimport urllib,
- 看到Django和layim实现websocketde资料很少,自己就琢磨了下,顺便搭建出来了。自己要去找闲心大神授权呀。先来看图这是初次搭
- MySQL/MariaDB/Percona数据库升级脚本MySQL/MariaDB/Percona数据库升级脚本截取《OneinStack》
- Chrome 浏览器的书签如果可以导出,并转换为我们需要的格式时,我们就可以编写各种插件来配合书签的使用。答案显然是可以的,接下来我们以 P
- 仿google的asp分页代码index.asp(文件1)<%@LANGUAGE="VBSCRIPT" CODEP
- 曾经遇过,差点抓狂,有装MSSQL的朋友,赶紧试一下,删除以下的组件.当然,前提是你要把自己的数据库搞定后再去删除,否则组件删除后很多功能不