【发布时间】:2011-02-19 08:28:34
【问题描述】:
我有一个 Excel CSV 文件,其中包含员工记录。像这样的:
mail,first_name,surname,employee_id,manager_id,telephone_number
blah@blah.com,john,smith,503422,503423,+65(2)3423-2433
foo@blah.com,george,brown,503097,503098,+65(2)3423-9782
....
我正在使用 DictReader 将其放入嵌套字典中:
import csv
gd_extract = csv.DictReader(open('filename 20100331 original.csv'), dialect='excel')
employees = dict([(row['employee_id'], row) for row in gp_extract])
以上方法是正确的方法吗?它确实有效,但它是正确的方法吗?更有效率的东西?另外,有趣的是,在 IDLE 中,如果我尝试在 shell 中打印出“员工”,它似乎会导致 IDLE 崩溃(大约有 1051 行)。
2。从内部字典中删除employee_id
第二个问题,我将它放入由employee_id索引的字典中,该值作为所有值的嵌套字典-但是,employee_id也是嵌套字典中的key:value,这有点多余的?有没有办法从内部字典中排除它?
3.在理解中处理数据
第三,我们需要对导入的数据进行一些操作——例如,所有电话号码的格式都错误,所以我们需要在那里做一些正则表达式。此外,我们需要将 manager_id 转换为实际经理的姓名和他们的电子邮件地址。大多数经理都在同一个文件中,而其他经理则在 external_contractors CSV 中,格式相似但不完全相同 - 我可以将其导入到单独的字典中。
这两项是否可以在单个列表理解中完成,或者我应该使用 for 循环?还是多重理解有效? (示例代码在这里真的很棒)。或者在 Python 中有更聪明的方法吗?
干杯, 维克多
【问题讨论】:
标签: python csv list-comprehension