博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python比较两个excel表格的差异
阅读量:6824 次
发布时间:2019-06-26

本文共 2134 字,大约阅读时间需要 7 分钟。

一个同事有两个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,如需转载请自行联系原作者
你可能感兴趣的文章
Ubuntu 全球 CDN 更新源
查看>>
VMbox复制虚拟机后网卡问题-bring up interface eth0:Device eth0 does not seem to be present
查看>>
UC browser对CSS的支持小结——手机网站CSS小结
查看>>
win7安装laravel
查看>>
Oracle 各后台进程功能说明
查看>>
屏蔽storm ui的kill功能
查看>>
我的友情链接
查看>>
Oracle Decode函数的使用
查看>>
MSF学习笔记
查看>>
经典脚本案例--check memory
查看>>
20.31 expect脚本同步文件;20.32 expect脚本指定host和要同步的文件;20.33 构建文件分发系统;20.34...
查看>>
CentOS单用户与救援模式
查看>>
华为交换机配置手工负载分担模式链路聚合LACP示例
查看>>
Django QuerySet API
查看>>
win 7 升级为IE11后打开IE后无反应解决办法
查看>>
rest 特征和优点
查看>>
postfix 源码centos7上搭建及错误提示---亲测
查看>>
drawable自定义字体颜色
查看>>
操作系统基础
查看>>
Cocos2d-x跨平台开发利器--EasyNDK-for-cocos2dx
查看>>