我正在寻找建议,同时在运行月度报告之前比较两个Excel数据文件。我希望这可以在python中完成。
2.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()
答案 0 :(得分:4)
我会看the pandas library。例如,如果我们从两个类似的文件开始:
>>> 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")
>>>
等等。
答案 1 :(得分:1)
xlrd
和xlwt
都是我成功用于读取/写入excel文档的Python库。
答案 2 :(得分:1)
如果excel文件只有一个或几个选项卡,那么最简单的解决方案就是将每个单独的选项卡保存为单独的csv,并使用像diff
这样的现有工具,它可以在命令行中使用很多平台,或许多文本编辑器,如vim,emacs或notepad ++。
$ diff file1.csv file2.csv
http://unixhelp.ed.ac.uk/CGI/man-cgi?diff
如果你需要在很多文件上运行它,我仍然建议只使用python作为脚本粘合剂,使用sys库重复调用unix diff程序。
显然,python 在标准库中有一个“difflib”,但我以前从未使用它,甚至没有人听过它,但是欢迎你来看看它:http://docs.python.org/2/library/difflib.html
答案 3 :(得分:0)
几年前我遇到了类似的问题,最终选择C#作为我的解决方案。在设置了基于.NET的环境后,我能够轻松地直接访问excel电子表格的内容。
如果您决定使用python,一种方法是使用COM对象来访问每个电子表格的详细信息: http://oreilly.com/catalog/pythonwin32/chapter/ch12.html
我建议使用C#的原因是.NET具有专门设计的类以便于访问电子表格。 http://msdn.microsoft.com/en-us/library/7fzyhc74(v=vs.80).aspx