-1

我正在寻找建议,同时尝试在运行月度报告之前比较两个 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()
4

4 回答 4

4

我会看看熊猫图书馆。例如,如果我们从两个相似的文件开始:

>>> 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")
>>>

等等。

于 2013-03-04T18:05:23.510 回答
1

xlrd并且xlwt都是我已成功用于读取/写入 Excel 文档的 Python 库。

于 2013-03-04T17:29:39.363 回答
1

如果 excel 文件只有一个或几个选项卡,那么您最简单的解决方案实际上是将每个单独的选项卡保存为单独的 csv,并使用现有工具,如diff在许多平台的命令行上可以正常工作,或在许多文本编辑器中,如vim、emacs 或记事本++。

$ 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

于 2013-03-04T18:09:26.207 回答
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

于 2013-03-04T17:49:55.867 回答