2010-05-05 89 views
0

我們有一個包含人員記錄的工作表的Excel文件。Excel正規表達式,還是導出到Python? ; Python中的「Vlookup」?

1.電話號碼衛生

其中一個字段是一個電話號碼字段,其中包含格式如電話號碼:

+XX(Y)ZZZZ-ZZZZ 

(其中X,Y和Z是整數)。

也有一些記錄具有較少的數字,如:

+XX(Y)ZZZ-ZZZZ 

。有些人真的搞砸了格式:

+XX(Y)ZZZZ-ZZZZ/ZZZZ 

或:

ZZZZZZZZ 

我們需要將這些全部清理成以下格式:

0YZZZZZZZZ (or OYZZZZZZ with those with less digits). 

2.監事詳細

每個人填寫也有一個主管,給出的數字標識。我們需要做一個查詢來獲取該主管的姓名和電子郵件地址,並將其添加到該行。

該查找將首先在同一張工作表上(即搜索自己),然後可以更多人員回退到另一個工作簿。

3.方法?

對於第一個問題,我想在Excel/VBA中以某種方式使用正則表達式來進行解析。我的Excel-fu不是最好的,但我想我可以學習......哈哈。這一點上的任何特定點?

但是,我最好將XLS導出爲CSV(例如使用xlrd),然後使用Python修復電話號碼?

對於第二種方法,我想在Excel中使用vlookups來拉入數據,並以某種方式讓它通過,首先搜索自身,然後在外部工作簿上,然後將錯誤文本。不知道如何做最後一部分。

但是,如果我碰巧選擇導出爲CSV並在Python中執行此操作,那麼執行vlookup的有效方法是什麼? (我應該轉換成一個字典,或者只是重複嗎?或者有沒有更好的,或者更地道的方式?)

乾杯, 維克多

+1

你的問題空間很大,用更直接的問題提出多個問題可能會更好,所以我們可以幫助你。很多這些決定可以根據您的偏好進行。 – dlamotte 2010-05-05 01:38:54

+0

@xyld:嗯,我應該刪除這個問題,然後把它分成兩個問題嗎?這只是我選擇的一種方式(Python與Excel/VBA),理想情況下它可以同時處理這兩種方法。謝謝,Victor – victorhooi 2010-05-05 01:57:25

+0

保持開放不會造成任何傷害,但可能會轉載您對特定方法的具體問題。 – dlamotte 2010-05-05 02:05:47

回答

2

一般來說,避免使用Excel公式;使用xlrd來提取您需要的數據,然後忘記它來自Excel並使用Python處理數據。例如。解決xlrd/vlookup問題:最好的方法是從包含鍵和值的2列的相關部分創建一個字典ONCE。

使用xlrd導出爲CSV然後再讀回是浪費時間並丟失有價值的信息(例如什麼是Excel單元格中數據的實際類型)。如果你的數據是在數據庫中,你會將它導出爲CSV並讀回來?

0

如果你去VBA路線,那麼值得看看在Tushar Mehta's documentation。如果你去Python路線,你可以嘗試解析爲CSV,或者,只是操縱內存中的東西,並通過XLWT編寫(這將是我的首選技術)。您也可以考慮直接使用COM調用修改Excel數據,基於this之類的內容。最後,如果你承諾在Excel外執行此操作,則可以查看Jython和Apache POI。不是最輕量級的解決方案,但POI是我所知道的功能最齊全的庫,不依賴於在Windows上運行。

正如其他人在評論中指出的那樣,很難具體表達這樣一個廣泛的問題。希望這裏的東西讓你開始...

+0

我已經看過Tushar Mehta的文檔(http://www.tmehta.com/regexp/),在這之前寫得非常好。然而,我不知道如何找到多個表達式組,然後將它們連接在一起,或者我可以使用RegExpFind來查找某個單一的正則表達式,但是,我並不確定如何找到多個表達式組,甚至如何指定我真正想要使用的找到的表達式的哪一部分。 E.g.有人會知道VBA將上述電話號碼+61(2)4534-5453轉換爲上述結果0245325453. – victorhooi 2010-05-05 04:54:11

+0

如果我們確實下了Python路線,我可能會使用xlrd。所以我會把它讀成一本字典,然後對它進行搜索?或者有更快的方法來執行xlrd中的查找 - 如在搜索特定行,然後從該行中拉出某些列(我知道您可以使用xlwt編寫Excel公式,但是,我會而如果有一個更加Pythonic的方式?) – victorhooi 2010-05-05 04:55:37