转载地址:https://blog.51cto.com/13777112/2135708

首先,将目标表和源表的内容分别写入到字典中,Excel表中不确定有没有字段是唯一值,所以选择了行号作为key值,一行的内容放到list中,然后从源表中取一行去目标表中遍历。想好之后开始敲代码了,在代码编写过程中遇到很多的问题,都是遇到一个查一个。基本的比对功能实现后,就想着在加个日志记录下比对结果。

#-*- coding: utf-8 -*-#比对两个Excel文件内容的差异
#---------------------假设条件----------------
#1、源表和目标表格式一致
#2、不存在合并单元格
#3、第2行开始比对
#---------------------------------------------import xlrd
import 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+'\n')      #写入内容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+':【开始比对】...'+'\n')       #写入开始时间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+=1else:                      #匹配不上将源表中行记录写入txtprint(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+' row:%d is different'%ori_num)fail+=1data=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():passif __name__ == '__main__':read_excel(r'first.xls','second.xls','Sheet1')

Python3实现两个Excel文件内容比对相关推荐

  1. python将两个excel匹配_Python3实现两个Excel文件内容比对

    #-*- coding: utf-8 -*- #比对两个Excel文件内容的差异 #---------------------假设条件---------------- #1.源表和目标表格式一致 #2 ...

  2. python如何生成excel文件_[原创] 如何用python3自动随机生成Excel文件内容

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 首先来看效果图 文件命名 文件内容 代码说明如下 import xlrd import xlwt from my_framework.log import ...

  3. 使用POI读取excel文件内容

    1.前言 项目中要求读取excel文件内容,并将其转化为xml格式.常见读取excel文档一般使用POI和JExcelAPI这两个工具.这里我们介绍使用POI实现读取excel文档. 2.代码实例: ...

  4. Python实现对比两个Excel数据内容并标出不同

    导读 日常工作中需要对比两个Excel工作表中的数据差异是很不方便的,使用python来做就比较简单了!本文为大家介绍了python实现对比两个Excel的数据内容并标记出不同数据的示例代码,需要的可 ...

  5. php读取excel文件_PHP如何读取excel文件内容?

    在PHP中可以使用PHPExcelReader或者PHPExcel来读取Excel文件内容,其读取内容的语句代码如"$objPHPExcel->getActiveSheet()-> ...

  6. 使用Python解决对比出两个Excel文件中的不同项并将结果重新写入一个新的Excel文件

    使用Python解决对比出两个Excel文件中的不同项并将结果重新写入一个新的Excel文件 因为有统计成员到会情况的任务,每次汇总时都很麻烦,需要一个个对应腾讯会议导出名单的成员,然后在总表上进行标 ...

  7. python3 根据sql导出excel文件 支持xls和xlsx

    python3 根据sql导出excel文件 支持xls和xlsx 代码简介: sql_output_excel函数是用来导出excel文件的,其他两个函数是导出xls和xlsx格式的. 使用pymy ...

  8. Python+xlrd:实现Excel文件内容读取(全文件or指定sheet页)

    一.xlrd常用方法简述: 代码示例 方法释义 book = xlrd.open_workbook(xlsx_path) 实例化工作簿对象 book sheet_num = book.nsheets ...

  9. VBA简单实现两个Excel文件的比较方法

    到财务走了一圈,正好看到一位同事正在对两个Excel文件进行比较.两个文件的内容大致如此(列出部分列名): 主贷身份证 主贷人 贷款余额 440602**** 李*瑜 ¥35,000 360102** ...

  10. Python读取两个txt文件内容,重新写到新的txt文件

    本博客已经转移到:www.itwps.com 此博客后续不会再更新,详情请关注一下www.itwps.com,谢谢. def test():new_text_path="你需要写入文件的路径 ...

最新文章

  1. SQL关键字转换大写核心算法实现
  2. 学习记录(电子信息专业)
  3. conn.execute的用法
  4. 巧用词语角色:基于目标自适应图的跨目标立场检测
  5. Angular jasmine TestBed.configureTestingModule的工作原理
  6. 计算机应用基础人才培养方案,1. 培养方案(计算机应用基础课程).doc
  7. python keras_深度学习:基于Keras的Python实践
  8. Ueditor使用以及遇到的问题
  9. pg_rewind 快速角色切换
  10. ssh(安全协议外壳)
  11. 网上收集总结一下mssql( 部分)
  12. Linux的工作队列work queue和延时工作队列
  13. python实现语音信号的分帧、加窗、预处理
  14. java取得对象占用的内存大小
  15. linux 文件夹同步备份,SyncToy实现本地文件夹同步备份
  16. Revit二次开发中如何创建结构平面,修改结构平面的视图范围
  17. 网规配置案例分析——国庆
  18. linux centos 最新版本,Linux 发行版
  19. PAT 1056 Mice and Rice
  20. webgame qlj

热门文章

  1. AGM FPGA选型手册
  2. MATLAB:数值微积分
  3. 无线通讯基站服务器,无线通信的软基站技术详解
  4. 【2021考研数学汤家凤高数辅导讲义】第四章 不定积分
  5. c++strcmp函数
  6. 酒店客房卫生打扫步骤及重点
  7. wifi分析仪怎么看哪个信道好_怎么查看周围的WiFi网络使用了哪些信道
  8. Gitlab-IDEA使用教程
  9. IPv6笔记-地址结构与分类
  10. 个人博客系统PHP源码 DouPHP轻博客