2010-05-05 95 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