因此,我目前正在尝试使用一个功能,该功能可以读取csv文件并以字典列表的形式返回其信息。正在读取的文件格式如下:
3070,01:44:03,Aaron,Glue,Finished
480,02:06:47,Aaron,Collins,Finished
2228,01:42:06,Abigail,Swales,Finished
1519,01:24:11,Adam,Mcarthur,Finished
...等等。
我的代码工作正常,这里是:
def readFile(filename):
file = open(filename,'r')
data = file.read()
a = data.split()
dataLists = []
for term in a:
termList = term.split(',')
dataLists.append(termList)
results = []
for list in dataLists:
competitorInfo = {'id': list[0], 'time': list[1], 'firstname': list[2], 'lastname': list[3]}
results.append(competitorInfo)
return results
现在我有两个csv文件,一个称为“ marathon.csv”,另一个称为“ marathon10.csv”。 marathon10.csv与marathon.csv完全相同,但仅包含10行信息(便于测试)。相比之下,marathon.csv包含2738行信息。
当在'marathon10.csv'上运行时程序返回预期的输出,而在'marathon.csv'上运行时我收到此错误:
或缩短后显示为“ IndexError:列表索引超出范围”,当读取以“ competitorInfo”开头的行时。
老实说,我不确定该去哪里。我已经给一些人发送电子邮件,他们告诉我这可能与marathon.csv的庞大大小有关,但这是真的吗?我需要它来工作,并且想对为什么我特意得到列表索引错误(如果可能)的正确解释。
我了解有些人可能想实际查看marathon.csv,但是我不确定如何分享。我向您保证,它与marathon10.csv完全相同,但有2738行,每行的格式都相同,有4个逗号,因此我不明白我如何收到我收到的错误。
非常感谢任何可以提供帮助的人:)
答案 0 :(得分:1)
我向您保证,它与marathon10.csv完全相同,但改为2738行
不,我向您保证不是。其中的一行很可能缺少逗号。 2738行不多。
您可以改用类似的方法,然后检查None
的输出:
def splitn(s, n):
return (s.split(',') + [None] * n)[:n]
def readFile(filename):
file = open(filename,'r')
data = file.read()
a = data.split()
dataLists = []
for term in a:
termList = splitn(term, 5)
dataLists.append(termList)
results = []
for dataList in dataLists:
competitorInfo = {'id': dataList[0], 'time': dataList[1], 'firstname': dataList[2], 'lastname': dataList[3]}
results.append(competitorInfo)
return results
现在,如果5
中少于term
个项目,您将得到用None
填充的列表