我正在开发一个项目,我正在尝试获取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'"]
访问该值,这看起来很痛苦。
是否有更快捷/更简单的方法来使用密钥?
答案 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)]