python与excel的区别-python比较两个excel表格的差异

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

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

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

#-*- coding:utf-8 -*-

import xlrd, os, sys

if len(sys.argv) != 3:

print "         ./script diff_1.xlsx diff_2.xlsx  "

sys.exit()

diff = {}

xls1 = sys.argv[1]

xls2 = sys.argv[2]

if os.path.isfile(xls1) and os.path.isfile(xls2):

pass

else:

print "         ./script diff_1.xlsx diff_2.xlsx  "

sys.exit()

def getcontent(table):  #获取xlsx表内容

tmp_data = {}

tmp_table = ''

all_data = {}

for j 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 i in tmp:

try:

tmp2 = tmp2 + i + ","

except:

tmp2 = tmp2 + str(i)+ ","

tmp_table = tmp_table + tmp2 + " "  #把多行的内容放一起

return (tmp_data, all_data)

def write_file(excel_diff, filename):

f = open(filename, 'w')

f.write(excel_diff)

f.close()

def diff_content(table1,table2): #检查两个表差异

diff_tmp = []

for i in table1:

if i in table2:

pass

else:

diff_tmp.append(i)

return list(set(diff_tmp))

def get_rows(diff, all_data): #获取差异位置

tmp = []

for i in diff:

for j in all_data:

if all_data[j].strip() == i.strip():

tmp.append(j)

break

return tmp

for i 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])

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值