2個Excel文件我有一個excel文件與以下領域比較使用python
SOFTWARE_NAME,版本和計數。
該文件是安裝在使用LANdesk生成的組織網絡中的所有軟件的清單。
我有另一個excel文件,這是手動生成這些軟件的購買清單。
我需要比較這些工作表並創建一個報告,說明組織是否合規。
因此,我如何比較這兩個文件。
有微軟Office等情況下被提及作爲剛剛辦公室和「服務器」的拼寫爲「SVR」
如何着手呢?
2個Excel文件我有一個excel文件與以下領域比較使用python
SOFTWARE_NAME,版本和計數。
該文件是安裝在使用LANdesk生成的組織網絡中的所有軟件的清單。
我有另一個excel文件,這是手動生成這些軟件的購買清單。
我需要比較這些工作表並創建一個報告,說明組織是否合規。
因此,我如何比較這兩個文件。
有微軟Office等情況下被提及作爲剛剛辦公室和「服務器」的拼寫爲「SVR」
如何着手呢?
SeyZ提到的第一步是確定如何讀取這些Excel文件。我沒有他提到的圖書館的經驗。相反,我使用COM編程來讀取和寫入Excel文件,這當然要求您安裝Excel。此功能來自PyWin32,如果您使用ActiveState Python installer,則默認安裝,如果您從Python.org獲得Python,則可以使用installed separately。
下一步將是將事物轉換爲一種通用格式,用於比較或搜索另一個文件中的元素。我首先想到的是使用像SQLite這樣快速簡單的方式將LANdesk軟件清單的內容加載到數據庫表中。
然後對於手動採購清單的每個項目,對產品名稱進行標準化並在庫存表中進行搜索。
規範化這些值將是一個將名稱拆分爲多個部分並用其完整版本替換部分單詞和短語的過程。例如,您可以創建轉換的查找表:
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,然後創建了藍代斯克產品表的經驗,以及規範和查找例程應該是相當簡單的,但如果不是那麼多僞代碼和例子將是有序的。讓我知道你是否需要這些。
非常感謝!雅,如果你能給我們更多的例子,這將是非常有幫助的。 – 2011-03-21 04:20:01
嗨,維諾德,我會舉幾個例子,但是到目前爲止你有什麼工作?你知道如何創建一個SQLite數據庫並將你的LANdesk工作表複製到它嗎?你有代碼來閱讀你的手動軟件列表工作表嗎? – Todd 2011-03-21 15:34:00
嘿託德,我們可以做到這一點沒有SQLite?正常化表可以使這個文件? – 2011-03-21 17:05:51
儘管我很欣賞'xlrd'等廣告,但'excel'標籤卻毫不相關。你有2個文件/數據庫/網頁,你沒有問題閱讀(例如)清單列表,一個有標準化的產品名稱,另一個有非標準的產品名稱... – 2011-03-20 21:55:10
爲什麼你不使用內置的電子表格比較工具來比較電子表格中的差異?當您安裝MS Office時,它會與Excel一起安裝。 – TylerH 2017-06-02 17:48:15