我有一个包含以下字段的Excel文件
Software_name,Version and Count。
此文件是使用LANdesk生成的组织网络中安装的所有软件的清单。
我有另一个excel文件,这是手动生成的这些软件的购买清单。
我需要比较这些表格并创建一份报告,说明该组织是否合规。
因此,我如何比较这两个文件。
有些情况,例如Microsoft Office被称为办公室而“服务器”拼写为'svr'
怎么做呢?
答案 0 :(得分:1)
有几个库可以操作.xls文件。
XLRD允许您从Excel电子表格文件中提取数据。因此,您可以轻松地比较两个文件。 (的读强>)
XLWT允许您创建一些Excel文件。 (的写强>)
XLUtils需要xlrd和xlwt软件包。所以,你可以阅读&通过这个库轻松编写。
答案 1 :(得分:1)
SeyZ提到的第一步是确定您希望如何阅读这些Excel文件。我没有他所参考的图书馆的经验。相反,我使用COM编程来读取和写入Excel文件,这当然要求您安装Excel。此功能来自PyWin32,如果您使用ActiveState Python installer,则默认安装,如果您从Python.org获得Python,则可以是installed separately。
下一步是将事物转换为通用格式,以便比较或搜索另一个文件中的元素。我在这里首先想到的是将LANdesk软件清单的内容加载到数据库表中,使用像SQLite一样简单易用的东西。
然后,对于手动购买清单的每个项目,规范化产品名称并在清单表格中搜索它。
将值标准化将是将名称拆分为部分并用其完整版本替换部分单词和短语的过程。例如,您可以创建转换查找表:
partial full
-------------------- --------------------
svr server
srv server
SRV Stevie Ray Vaughan
office Microsoft Office
etc et cetera
您可能希望通过规范化过程运行手动列表数据,并将部分值及其完整版本添加到此表,直到它处理您需要的所有情况。然后运行比较。这是一些Pythonish伪代码:
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产品表,规范化和查找例程应该相当简单,但如果没有,那么更多的伪代码和示例将是有序的。如果您需要,请告诉我。