比较两个不同Excel文件中一列的记录,报告缺失或新增项
我在寻找一些建议,想在生成每月报告之前比较两个Excel数据文件。我希望这个过程能用Python来完成。
这两个.xls文件应该是相同的(一个是当前月份的数据,另一个是上个月的数据),但可能会有某些记录(行)被添加或缺失。我有一个“ID”列,里面包含了我想要比较的信息。
如果有任何差异(添加或缺失的行),我希望能报告出这些不一致的地方。
理想情况下,这个报告可以导出为.txt文件或者第三个.xls文件。
任何代码片段或示例都会非常感谢!
下面是我用来做类似事情的代码,输出为.txt文件,但一旦遇到第一个不一致的地方,就无法看到是哪个记录导致的问题。
f1 = open("AuditData.txt", "r")
f2 = open("AuditData2.txt", "r")
fileOne = f1.readlines()
fileTwo = f2.readlines()
f1.close()
f2.close()
outFile = open("AuditData3.txt", "w")
x = 0
for i in fileOne:
if i != fileTwo[x]:
outFile.write(i+" <> "+fileTwo[x])
x += 1
outFile.close()
4 个回答
1
如果你的Excel文件只有一个或几个标签页,最简单的方法就是把每个标签页单独保存为一个csv文件,然后使用像diff
这样的工具。这个工具可以在很多平台的命令行上直接使用,也可以在许多文本编辑器里使用,比如vim、emacs或者notepad++。
$ diff file1.csv file2.csv
http://unixhelp.ed.ac.uk/CGI/man-cgi?diff
如果你需要对很多文件进行这个操作,我还是建议用Python来做一个小脚本,反复调用Unix的diff程序,使用sys库就可以了。
听说Python的标准库里有一个叫“difflib”的东西,但我自己没用过,也没听别人提起过。不过你可以去看看这个链接:http://docs.python.org/2/library/difflib.html
1
xlrd
和xlwt
都是我用过的Python库,它们可以用来读取和写入Excel文档,非常好用。
4
我建议你看看pandas库。比如说,如果我们有两个相似的文件:
>>> import pandas as pd
>>>
>>> df0 = pd.ExcelFile("id_data1.xls").parse("Sheet1")
>>> df1 = pd.ExcelFile("id_data2.xls").parse("Sheet1")
>>> df0 = df0.set_index("ID")
>>> df1 = df1.set_index("ID")
>>> df0
A B
ID
1 a e
2 b f
3 c g
4 d h
>>> df1
A B
ID
1 a e
2 b nolongerf
4 d h
5 g h
我们可以把它们对齐,查看它们之间的不同之处,然后把结果保存到一个Excel文件里:
>>> a0, a1 = df0.align(df1)
>>> different = (a0 != a1).any(axis=1)
>>> comp = a0[different].join(a1[different], lsuffix='_old', rsuffix='_new')
>>> comp
A_old B_old A_new B_new
ID
2 b f b nolongerf
3 c g NaN NaN
5 NaN NaN g h
>>> comp.to_excel("comparison.xls")
>>>
还有其他的操作。