在Python 2.7中访问带有空格的unicoded键

时间:2013-03-13 20:47:48

标签: python xlrd dictionary python-unicode

我正在开发一个项目,我正在尝试获取Excel文件(通过xlrd读取)并在其中进行地理编码地址。为此,我使用的是目录列表,每个目录条目都是一个单独的站点。

addressList[0]之类的内容会产生以下结果:

{text:u'First name ': u'John',
 text:u'Site City': u'Indio',
 text:u'Site State': u'CA',
 text:u'Last name': u'Doe',
 text:u'Site Phone': u'760-555-1234',
 text:u'Site Zip': u'92201',
 text:u'Site Address1': u'1313 Mockingbird Lane',
 text:u'Site Name': u'Tyrell Industries',
 text:u'Hours': u'Mon-Fri 12:00-1:00',
 text:u'Affliation': u'Boys & Girls Clubs of America'}

(我刚刚在电子表格中意识到,“联盟”的拼写错误。嗯。)

现在,我通过环顾keys in Python can have spaces in them来了解,这应该不是问题。但输入addressList[0]['Site Phone']会导致KeyError。实际上,尝试获取'Hours'键的值会导致类似的KeyError。

基于question on Unicode keys,我尝试了以下内容:

STRING_DATA = dict([(str(k), v) for k, v in addressList[0].items()])

这导致了一个包含以下条目的字典:

"text:u'Site Name'": u'Tyrell Industries',

这是相当不错的,除了我现在必须通过STRING_DATA["text:u'Site Name'"]访问该值,这看起来很痛苦。

是否有更快捷/更简单的方法来使用密钥?

2 个答案:

答案 0 :(得分:2)

text:u'First name ': u'John',不是有效的dict条目。

text:之类的密钥之前有[{1}}前缀的原因是,因为您使用text:u'First Name'作为dict的密钥。

您应该使用xlrd cell

从单元格中明确提取值

类似的东西:

cell.value

答案 1 :(得分:1)

column_names = site_sheet.row_values(rowx=0, end_colx=NUMBER_OF_COLUMNS)

然而,标题似乎需要一点点磨砂,例如u'First name 'u'Last name'可以通过删除前导和尾随空格并强制执行标题大小写符合其他标题:

column_names = [x.strip().title()
    for x in site_sheet.row_values(row=0, end_colx=NUMBER_OF_COLUMNS)]