我有一个CSV文件,我在pandas的帮助下解析并转换为类似的字典:contacts = read_csv(file_handle).to_dict()
。所以contacts
现在是一个字典,包含以下键:
(Pdb) contacts.keys()
['FirstName', 'Title', 'LastName', 'EmailAddress']
有几千行,我需要以某种方式访问它们,所以我尝试了许多不同的循环,一个是:
for i, name in enumerate(contacts['FirstName'].values()):
parsed_contacts.append(dict(
first_name=name,
last_name=...
))
(以上示例已缩短以用于显示目的) 现在这可以正常工作,直到最后一行,它在FirstName上抛出KeyError:
File "/app/importer/contacts.py", line 290, in parse_contacts
for i, name in enumerate(contacts['FirstName'].values()):
KeyError: 'FirstName'
这对我来说毫无意义:它实际上适用于4041行,并且在第4042行因KeyError而失败
如果我以其他方式访问它,同样的事情:
for i in range(len(contacts['FirstName'].values())):
parsed_contacts.append(dict(
first_name=contacts['FirstName'][i],
不确定那里发生了什么,它让我发疯,因为如果我在pdb中以交互方式运行它们会起作用:
(Pdb) for i, name in enumerate(contacts['FirstName'].values()): print
name
John
Juliette
...
nan
Jose
Jesús
Frances
(Pdb) for i in range(len(contacts['FirstName'].values())): print i
0
...
4040
4041
为什么会发生这种情况?
答案 0 :(得分:1)
当csv文件末尾有新行时,通常会发生此错误。因此,当csv阅读器读取文件时,它基本上将其作为没有键的空记录。因此,引发了一个关键错误。一种解决方法是,您可以使用dict.get() method来确保不会引发错误。您可以查找[此处更多示例]和here 3。还要仔细检查csv文件末尾是否有额外的行。