python比较两个excel表格的差异

一个同事有两个excel表格要比较差异, 找了一下有相关软件,如: beyond compare, excel compare

但这两个似乎都是直接排序再比较的.


然后没办法,就用python折腾了一个脚本. 这个脚本先读入要比较的文件中的表. 读的时候 ,如果没有空行就把它和它前面的加一起,直到有空行. 这样比较的话, 不能得到具体那一行有差异, 只有一个大概的位置. 如果表格中间空行越少,越精确. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/python
#-*- coding:utf-8 -*-
 
import  xlrd, os, sys
 
if  len (sys.argv) ! =  3 :
   print  "\n        ./script diff_1.xlsx diff_2.xlsx \n"
   sys.exit()
 
diff  =  {}
xls1  =  sys.argv[ 1 ]
xls2  =  sys.argv[ 2 ]
 
if  os.path.isfile(xls1)  and  os.path.isfile(xls2):
   pass
else :
   print  "\n        ./script diff_1.xlsx diff_2.xlsx \n"
   sys.exit()
 
def  getcontent(table):   #获取xlsx表内容
   tmp_data  =  {}
   tmp_table  =  ''
   all_data  =  {}
 
   for  in  xrange (table.nrows):
     tmp  =  table.row_values(j)
     if  list ( set (tmp))  = =  ['']:
       tmp_data[tmp_table]  =  ''
       if  tmp_table ! =  '':
         all_data[j]  =  tmp_table
       tmp_table  =  ''
     else :
       tmp2  =  ""
       for  in  tmp:
         try :
           tmp2  =  tmp2  +  +  ","
         except :
           tmp2  =  tmp2  +  str (i) +  ","
       tmp_table  =  tmp_table  +  tmp2  +  "\n"   #把多行的内容放一起
   return  (tmp_data, all_data)
 
def  write_file(excel_diff, filename):
   =  open (filename,  'w' )
   f.write(excel_diff)
   f.close()
 
def  diff_content(table1,table2):  #检查两个表差异
   diff_tmp  =  []
   for  in  table1:
     if  in  table2:
       pass
     else :
       diff_tmp.append(i)
   return  list ( set (diff_tmp))
  
def  get_rows(diff, all_data):  #获取差异位置
   tmp  =  []
   for  in  diff:
     for  in  all_data:
       if  all_data[j].strip()  = =  i.strip():
         tmp.append(j)
         break
   return  tmp
        
 
for  in  range ( 0 , 2 ):   # 比较几个表
   data1  =  xlrd.open_workbook(xls1)
   table1  =  data1.sheets()[i]
   data2  =  xlrd.open_workbook(xls2)
   table2  =  data2.sheets()[i]
   
   tmp1, all1  =  getcontent(table1)
   tmp2, all2  =  getcontent(table2)
 
   result  =  diff_content(tmp1, tmp2)  #1 中有 2 没有的具体内容
#  result2= diff_content(tmp2, tmp1)  #2 中有 1 没有的具体内容
 
   diff[i]  =  get_rows(result,all1)
   print  sorted (diff[i])
 
#  write_file(sorted(diff[i]), "/tmp/diff.txt")
 
#  diff[i] = get_rows(result2,all2)
#  print sorted(diff[i])



本文转自 nonono11 51CTO博客,原文链接:http://blog.51cto.com/abian/1603947,如需转载请自行联系原作者
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值