使用Python比较两个Excel文件

2 投票
2 回答
14069 浏览
提问于 2025-04-16 14:04

我有一个Excel文件,里面有以下几个字段:

软件名称、版本和数量。

这个文件是一个组织网络中所有安装的软件的清单,是通过LANdesk生成的。

我还有另一个Excel文件,是这些软件的采购清单,这个文件是手动生成的。

我需要对比这两个表格,并制作一份报告,说明这个组织是否符合规定。

所以,我该如何比较这两个文件呢?

有些情况,比如微软Office被称为“office”,而“server”则写成“svr”。

我该怎么处理这些问题呢?

2 个回答

1

有几个库可以用来处理 .xls 文件。

XLRD 这个库可以让你从 Excel 表格文件中提取数据。这样你就可以轻松比较两个文件了。(读取

XLWT 这个库可以让你创建一些 Excel 文件。(写入

XLUtils 这个库需要同时安装 xlrd 和 xlwt 包。这样,你就可以轻松地 读取和写入 了,得益于这个库。

1

首先,正如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产品表,以及标准化和查找的过程应该相对简单,但如果没有,那我可以提供更多的伪代码和示例。告诉我你是否需要这些。

撰写回答