使用Python比较两个Excel文件
我有一个Excel文件,里面有以下几个字段:
软件名称、版本和数量。
这个文件是一个组织网络中所有安装的软件的清单,是通过LANdesk生成的。
我还有另一个Excel文件,是这些软件的采购清单,这个文件是手动生成的。
我需要对比这两个表格,并制作一份报告,说明这个组织是否符合规定。
所以,我该如何比较这两个文件呢?
有些情况,比如微软Office被称为“office”,而“server”则写成“svr”。
我该怎么处理这些问题呢?
2 个回答
首先,正如SeyZ提到的,第一步是确定你想怎么读取这些Excel文件。我对他提到的那些库没有经验。相反,我是通过COM编程来读取和写入Excel文件,这当然需要你电脑上安装了Excel。这项功能来自于PyWin32,如果你使用的是ActiveState Python安装包,它会默认安装,或者如果你是从Python.org下载的Python,也可以单独安装。
接下来的步骤是把内容转换成一个通用格式,以便进行比较,或者在一个文件中查找另一个文件的元素。我首先想到的是使用像SQLite这样简单快速的工具,把LANdesk软件的库存内容加载到一个数据库表中。
然后,对于每一项手动购买清单,标准化产品名称,并在库存表中搜索它。
标准化的过程就是把一个名称拆分成几个部分,并用完整的词和短语替换掉部分的词。例如,你可以创建一个转换的查找表:
partial full
-------------------- --------------------
svr server
srv server
SRV Stevie Ray Vaughan
office Microsoft Office
etc et cetera
你需要把手动清单的数据经过标准化处理,并把部分值和它们的完整版本添加到这个表中,直到它能处理你需要的所有情况。然后进行比较。这里有一些类似Python的伪代码:
for each row of manual inventory excel worksheet:
product = sh.Cells(row, 1) # get contents of row n, column 1
# adjust based on the structure of this sheet
parts = product.split(" ") # split on spaces into a list
for n, part in enumerate(parts):
parts[n] = Normalize(part) # look up part in conversion table
normalProduct = " ".join(parts)
if LookupProduct(normalProduct): # look up normalized name in LANdesk list
add to compliant list
else:
add to non-compliant list
if len(non-compliant list) > 0:
TimeForShopping(non-compliant list)
如果你有使用SQLite或其他数据库与Python结合的经验,那么创建LANdesk产品表,以及标准化和查找的过程应该相对简单,但如果没有,那我可以提供更多的伪代码和示例。告诉我你是否需要这些。