比较两个不同Excel文件中一列的记录,报告缺失或新增项

-1 投票
4 回答
8278 浏览
提问于 2025-04-17 17:53

我在寻找一些建议,想在生成每月报告之前比较两个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

xlrdxlwt都是我用过的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")
>>>

还有其他的操作。

撰写回答