#-*- 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+‘\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+=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(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‘)

python将两个excel匹配_Python3实现两个Excel文件内容比对相关推荐

  1. python中bttext什么意思_Python实现解析Bit Torrent种子文件内容的方法

    有人会 python语言 对BT种子解析 吗bt的客户端,本来就有纯python编写的. 你找一个下载就可以了. 我印象中bittorrent就是python编写的. python开发很方便,也很快. ...

  2. python读取指定字节_python读取指定字节及位置的文件内容

    如今有一个xl.txt文档,内容以下:函数 AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDspa 能够经过open()函数来打开文件,好比:文档 >>> f = o ...

  3. 20210918 【双击excel文件,看不到文件内容,只有灰蒙蒙的一片】的解决办法

           [问题的起因] office版本2010不知道什么时候开始的,"双击excel文件",在打开的excel窗口中,看不到文件内容,只有灰蒙蒙的一片.         昨 ...

  4. python读取excel绘图_python3读取excel绘图-女性时尚流行美容健康娱乐mv-ida网

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页 > 高级搜索 centos下编译安装 pyth ...

  5. Redis遍历、模糊匹配key的两个命令keys、scan(python使用Redis)

    Redis遍历.模糊匹配key的两个命令keys.scan(python使用Redis) (1)全量遍历–keys命令 获取Redis中的所有键: import redis pool=redis.Co ...

  6. python表格多列合并_python 合并excel表格数据-如何用python从excel中同时提取两个列的数据,并生成dict(用xlrd)...

    用Python导出工程文件两个子页里的数据成为两个excel表格,但我想把它合并成个一个excel表格的两个sheet 可以采用一些操作Excel块去实现,比如xlrd.xlwt.openpyxl.x ...

  7. 如何用python计算excel两行之间的差值_excel表格求两列数据差值-怎样在EXCEL表格中求两列数的差?...

    怎样在EXCEL表格中求两列数的差? 1.双击打开需行求差的Excel表格,Excel表格. 2.在进入Excel表格后,使用鼠标需差的单元格,先选中其中一行即可. 3.在选中一行后,在单元格内输入& ...

  8. python对excel操作简书_Python实现EXCEL常用操作——pandas简介

    知乎的代码块太丑了,这里的内容就更新到简书了Python实现EXCEL常用操作--pandas简介​www.jianshu.com EXCEL是日常办公最常用的软件,然而遇到数据量特别大(超过10W条 ...

  9. 用Python实现数据筛选与匹配

    下面我们将学习两个项目案例代码,分别解决Excel常见场景中的数据筛选问题和数据匹配问题. 数据筛选要求我们在表中筛选出符合条件的数据. 数据匹配需要我们在多个表之间匹配相关的数据. 与之前一样,完成 ...

最新文章

  1. Delphi7的主窗口
  2. BugKuCTF WEB flag在index里
  3. 解决413 Request Entity Too Large
  4. Asix下日志包冲突
  5. 聚焦数字化智慧安防的新型社区
  6. 《自然》重磅新论文:女性更易患阿尔兹海默症,竟然是因为它!
  7. Jeewx企业号系统入门配置指南
  8. Codeforces 776D The Door Problem
  9. 2017.8.16 喵星球上的点名 思考记录
  10. “命令终端”的实现3-命令的执行
  11. html 嵌入 excel_用了这么久Excel,你了解它的前世今生吗?
  12. LeetCode 70.爬楼梯(动态规划)
  13. 我是如何把SpringBoot项目的并发提升十倍量级的
  14. 实习成长之路:MySQL二 : 一条SQL更新语句是如何执行的?
  15. 从零开始Android游戏编程(第二版) 第十章 游戏循环的设计
  16. python应用学习(五)——requests爬取网页图片
  17. 如何修复win7蓝牙服务器,快速解决win7系统蓝牙驱动的修复方法
  18. 大唐移动骨干集体出走
  19. Task4 论文种类分类
  20. Excel2010条件格式结合公式和格式刷使用存在严重bug

热门文章

  1. 82_21_09.16
  2. Wordpress建站-wp建站网站优化收录
  3. QQ聊天记录器演示程序
  4. [附源码]计算机毕业设计JAVA游戏装备交易网站论文2022
  5. 三次贝塞尔曲线画圆的方法。
  6. markdown--写博客高清大图水印很烦恼?Github+PicGo实现在线免费图床
  7. 没有人能随随便便成功,十年磨一剑
  8. 小制作- -炫彩水晶钟 TOM搬家
  9. IM即时通讯-从0到1的实践(一)
  10. 学习python(七)——zip() 、reserved()、sorted()