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,如需转载请自行联系原作者
相关文章
|
3天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
12 0
|
3天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
18 0
|
4天前
|
存储 NoSQL MongoDB
MongoDB数据库转换为表格文件的Python实现
MongoDB数据库转换为表格文件的Python实现
35 0
|
1天前
|
数据采集 数据挖掘 关系型数据库
Excel计算函数(计算机二级)(1),2024年最新2024Python架构面试指南
Excel计算函数(计算机二级)(1),2024年最新2024Python架构面试指南
|
2天前
|
开发框架 资源调度 JavaScript
uniapp本地导出表格excel
uniapp本地导出表格excel
|
3天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
24 0
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
Python转换Excel到Markdown
Python转换Excel到Markdown
9 0
|
4天前
|
Python
python如何读取excel文件,并修改内容?
python如何读取excel文件,并修改内容?
8 0
|
4天前
|
存储 数据采集 数据可视化
Python列表到Excel表格第一列的转换技术详解
Python列表到Excel表格第一列的转换技术详解
8 0
|
4天前
|
easyexcel
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间