python匹配excel-Python3实现两个Excel文件内容比对

最近在工作中,需要人工比对大量的excel格式报表,刚好刚学了Pyhon入门基础知识,想着写个东西练练手,不但能提高代码编写能力,还能减轻工作量,提高工作效率。说干就干,简单的理了逻辑。首先,将目标表和源表的内容分别写入到字典中,Excel表中不确定有没有字段是唯一值,所以选择了行号作为key值,一行的内容放到list中,然后从源表中取一行去目标表中遍历。想好之后开始敲代码了,在代码编写过程中遇到很多的问题,都是遇到一个查一个。基本的比对功能实现后,就想着在加个日志记录下比对结果。写下此文记录下,just do it.

下面是全部代码

#-*- coding: utf-8 -*-

#比对两个Excel文件内容的差异

#---------------------假设条件----------------

#1、源表和目标表格式一致

#2、不存在合并单元格

#3、第2行开始比对

#---------------------------------------------

import xlrd

import xlwt

import os

import time; # 引入time模块

#往日志文件中追加内容函数

def writeappend_logfile(filename,content):

file=open(filename,"a") #以追加方式打开日志文件

time_now= time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #系统时间格式化

file.writelines(time_now+":"+content+" ") #写入内容

file.close() #关闭文件

def read_excel(ori_path,tar_path,sub_name):#

success=0 #匹配一致数量

fail=0 #匹配不一致数量

origin_xls={} #存储源xls文件

target_xls={} #比对的xls文件

wb_ori=xlrd.open_workbook(ori_path) #打开原始文件

wb_tar=xlrd.open_workbook(tar_path) #打开目标文件

sheet_num = len(wb_ori.sheets()) #源表子表数量

## for sheet_i in range(sheet_num): #excel中子页面数量

## sheet_ori=wb_ori.sheet_by_index(sheet_i) #通过索引值获取源表名

## sheet_tar=wb_tar.sheet_by_index(sheet_i) #通过索引值获取源表名

startime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #获取系统当前时间并格式化为格式

print (startime," 开始比对...")

logname="log_"+startime[0:10]+".log" #截取日期年月日构成日志文件名

logfile=open(logname,"w") #创建日志文件,如果文件存在则清空内容,不存在则创建,如果需要同时批量比对多张表,可以考虑将日志文件名作为参数传入

logfile.writelines(startime+":【开始比对】..."+" ") #写入开始时间

logfile.close() #关闭日志文件

try:

sheet_ori=wb_ori.sheet_by_name(sub_name)

sheet_tar=wb_tar.sheet_by_name(sub_name)

if sheet_ori.name==sheet_tar.name:

#sheet表名

if sheet_ori.name==sub_name:

#先将数存入dictionary中dictionary(rows:list)

#第一行存储表头

#源表取一行数据与目标表全表进行比对如果表中存在主键可以用主键进行索引

#数据从excel第3行开始

for rows in range(1,sheet_ori.nrows):

orign_list=sheet_ori.row_values(rows) #源表i行数据

target_list=sheet_tar.row_values(rows) #目标表i行数据

origin_xls[rows]=orign_list #源表写入字典

target_xls[rows]=target_list #目标表写入字典

if origin_xls[1] == target_xls[1]:

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" 表头一致")

for ori_num in origin_xls:

flag="false" #判断是否一致标志

for tar_num in target_xls:

if origin_xls[ori_num]==target_xls[tar_num]:

flag="true"

break #如果匹配到结果退出循环

if flag=="true": #匹配上结果输出后台日志

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" row:%d is ok"%ori_num)

success+=1

else: #匹配不上将源表中行记录写入txt

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" row:%d is different"%ori_num)

fail+=1

data=origin_xls[ori_num]

logstr="【不一致】row<"+str(ori_num)+">:"+str(data)

writeappend_logfile(logname,logstr)

# logstr="【比对完成】总记录数:"+str(ori_num)+"条,一致:"+str(success)+"条,不一致:"+str(fail)+"条"

logstr="【比对完成】总记录数:{:d}条,一致:{:d}条,不一致:{:d}条".format(ori_num,success,fail)

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" 【%s】比对结束"%sheet_ori.name)

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+" 总记录数:%d条,一致:%d条,不一致:%d条"%(ori_num,success,fail))

writeappend_logfile(logname,logstr)

else:

errmsg="【"+sub_name+"】子表名不一致"

writeappend_logfile(logname,errmsg)

except Exception as err:

writeappend_logfile(logname,str(err)) #输出异常

def main():

pass

if __name__ == "__main__":

read_excel(r"2.xls",1.xls","sheet1")

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python可以使用第三方库`pandas`来比对两个Excel文件。 首先,我们需要导入`pandas`库和两个Excel文件。可以使用`read_excel()`函数将Excel文件读取为数据框(DataFrame)对象。 接下来,可以使用`equals()`方法将两个数据框对象进行比较。该方法将逐行逐列地比较两个数据框的元素,如果两个数据框完全相同,则返回True,否则返回False。 以下是使用Python比对两个Excel文件的示例代码: ``` python import pandas as pd # 读取两个Excel文件 df1 = pd.read_excel('file1.xlsx') df2 = pd.read_excel('file2.xlsx') # 比对两个数据框对象 is_equal = df1.equals(df2) # 输出比对结果 if is_equal: print("两个Excel文件完全相同。") else: print("两个Excel文件不完全相同。") ``` 以上代码假设需要比对的两个Excel文件分别为`file1.xlsx`和`file2.xlsx`。根据实际情况替换文件名即可。 这段代码将读取两个Excel文件,并使用`equals()`方法比较它们。最后输出比对结果,如果两个Excel文件完全相同,则输出"两个Excel文件完全相同",否则输出"两个Excel文件不完全相同"。 需要注意的是,比对过程中将比较每个单元格的内容,包括数值、文本、日期等。如果两个Excel文件格式不完全相同(如列数、列顺序等不同),则不能得到正确的比对结果。在比对前,可以使用`pandas`库的其他函数对需要比对的数据进行预处理,以确保格式的一致性。 ### 回答2: 在Python中,可以使用openpyxl库来比对两个Excel文件。首先,我们需要使用openpyxl打开两个Excel文件,并获取各自的工作簿和工作表。然后,可以一行一行地比对两个Excel文件中的数据。 以下是一个示例代码,用于比对两个Excel文件中的数据: ``` import openpyxl def compare_excel(file1, file2): wb1 = openpyxl.load_workbook(file1) # 打开第一个Excel文件 wb2 = openpyxl.load_workbook(file2) # 打开第二个Excel文件 sheet1 = wb1.active # 获取第一个Excel文件的活动工作表 sheet2 = wb2.active # 获取第二个Excel文件的活动工作表 for row1, row2 in zip(sheet1.iter_rows(), sheet2.iter_rows()): for cell1, cell2 in zip(row1, row2): if cell1.value != cell2.value: # 比对两个单元格的值 print(f"不匹配的单元格: {cell1.coordinate} - {cell1.value} | {cell2.coordinate} - {cell2.value}") print("比对完成") # 调用函数,传入要比对的两个Excel文件路径 compare_excel("file1.xlsx", "file2.xlsx") ``` 上述代码将会逐行比对两个Excel文件中的单元格数据,并输出不匹配的单元格的坐标和值。你可以根据实际情况,对比较结果进行其他处理或记录。 需要注意的是,为了运行上述代码,你需要先安装openpyxl库,你可以使用pip命令来进行安装: ``` pip install openpyxl ``` 希望能对你有所帮助。 ### 回答3: Python可以使用第三方库pandas来比对两个Excel文件。下面给出一个简单的示例。 首先,需要安装pandas库。可以使用以下命令安装: ```python pip install pandas ``` 接下来,可以使用pandas库中的read_excel函数读取两个Excel文件,并将它们分别存储在两个DataFrame对象中。然后,使用equals方法来比较两个DataFrame对象是否相等。 以下是一个简单的比对两个Excel文件的示例代码: ```python import pandas as pd # 读取第一个Excel文件 df1 = pd.read_excel("file1.xlsx") # 读取第二个Excel文件 df2 = pd.read_excel("file2.xlsx") # 比较两个DataFrame对象是否相等 if df1.equals(df2): print("两个Excel文件相同") else: print("两个Excel文件不同") ``` 以上代码中,我们读取了两个Excel文件并将它们分别存储在df1和df2两个DataFrame对象中。然后,使用equals方法比较这两个DataFrame对象是否相等。如果相等,则输出"两个Excel文件相同",否则输出"两个Excel文件不同"。 这只是一个简单的示例,实际应用中可能需要根据具体情况进行更复杂的比对操作。但使用pandas库可以方便地读取Excel文件,并对数据进行各种处理和比对操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值