1

我正在做一个项目,我试图在其中获取 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'}

(我刚刚在电子表格中意识到,“隶属关系”拼写错误。嗯。)

现在,通过环顾四周,我知道Python 中的键中可以有空格,这应该不是问题。但是输入addressList[0]['Site Phone']会导致 KeyError。事实上,尝试获取“Hours”键的值会导致类似的 KeyError。

基于关于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'"],这似乎很痛苦。

有没有更快/更简单的方法来使用这些键?

4

2 回答 2

2

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

text:像这样的键之前有前缀的原因text:u'First Name'是,因为您使用xlrd cells 作为 dict 的键。

您应该使用明确地从单元格中提取值cell.value

就像是:

new_keys = [k.value for k in addresslist[0]]

于 2013-03-13T20:54:53.380 回答
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)]
于 2013-03-14T10:39:07.283 回答