Python比較兩個excel文檔內容的異同


#-*- 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):#
#print("ori_path:", ori_path)
#print("tar_path:", tar_path)
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() #關閉日志文件
#print("##########################")

try:
sheet_ori=wb_ori.sheet_by_name(sub_name)
#print("sheet_ori.name:", sheet_ori.name)
sheet_tar=wb_tar.sheet_by_name(sub_name)
#print("sheet_tar.name:", sheet_tar.name)
#print("1111111111111111111111111111111")
if sheet_ori.name==sheet_tar.name:
#sheet表名
if sheet_ori.name==sub_name:
#先將數存入dictionary中dictionary(rows:list)
#第一行存儲表頭
#源表取一行數據與目標表全表進行比對如果表中存在主鍵可以用主鍵進行索引
#數據從excel第3行開始
#print("222222222222222222222222222")
for rows in range(0,sheet_ori.nrows):
orign_list=sheet_ori.row_values(rows) #源表i行數據
#target_list=sheet_tar.row_values(rows) #目標表i行數據
origin_xls[rows]=orign_list #源表寫入字典
#print("origin_xls[rows]:", origin_xls[rows])
#target_xls[rows]=target_list #目標表寫入字典
for rows in range(0, sheet_tar.nrows):
target_list = sheet_tar.row_values(rows) # 目標表i行數據
target_xls[rows] = target_list # 目標表寫入字典
#print("target_xls[rows]", target_xls[rows])


if origin_xls[0] == target_xls[0]:
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+' 表頭一致')
num = len(origin_xls)
print("num:", num)
num1 = len(target_xls)
print("num1:", num1)
if num >= num1:
for ori_num in origin_xls:
print("ori_num:", ori_num)
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())+' 文件:', ori_path+' '+' row:%d is ok'%(ori_num+1))
success+=1
else: #匹配不上將源表中行記錄寫入txt
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+' 文件:', ori_path+' '+' row:%d is different'%(ori_num+1))
fail+=1
data=origin_xls[ori_num]
logstr='文件:', ori_path + ' ' + '【不一致】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 + 1,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+1,success,fail))
writeappend_logfile(logname,logstr)
else:
for tar_num in target_xls:
#for ori_num in origin_xls:
#print("tar_num:", tar_num)
flag = 'false' # 判斷是否一致標志
#for tar_num in target_xls:
for ori_num in origin_xls:
#if origin_xls[ori_num] == target_xls[tar_num]:
if target_xls[tar_num] == origin_xls[ori_num]:
flag = 'true'
break # 如果匹配到結果退出循環
if flag == 'true': # 匹配上結果輸出后台日志
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ' 文件: ', tar_path+' '+ ' row:%d is ok' % (tar_num + 1))
success += 1
else: # 匹配不上將源表中行記錄寫入txt
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+ ' 文件: ', tar_path+' ' + ' row:%d is different' % (
tar_num + 1))
fail += 1
data = target_xls[tar_num]
#logstr = '文件: ', tar_path + ' ' + '【不一致】row<' + str(tar_num+1) + '>:' + str(data)
logstr = '【不一致】row<' + str(tar_num + 1) + '>:' + str(data)
#logstr1 = ' 文件: ', tar_path
#logstr = logstr2 + logstr1
writeappend_logfile(logname, logstr)
# logstr='【比對完成】總記錄數:'+str(ori_num)+'條,一致:'+str(success)+'條,不一致:'+str(fail)+'條'
logstr = '【比對完成】總記錄數:{:d}條,一致:{:d}條,不一致:{:d}條'.format(tar_num + 1, success, fail)
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ' 【%s】比對結束' % sheet_tar.name)
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ' 總記錄數:%d條,一致:%d條,不一致:%d條' % (
tar_num + 1, 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'1.xlsx','2.xlsx','Sheet1')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM