Python代码适用于一个文件,但不适用于格式相同的较长文件吗?

时间:2019-11-12 10:22:40

标签: python python-3.x csv

因此,我目前正在尝试使用一个功能,该功能可以读取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'上运行时我收到此错误:

link to error on imgur

或缩短后显示为“ IndexError:列表索引超出范围”,当读取以“ competitorInfo”开头的行时。

老实说,我不确定该去哪里。我已经给一些人发送电子邮件,他们告诉我这可能与marathon.csv的庞大大小有关,但这是真的吗?我需要它来工作,并且想对为什么我特意得到列表索引错误(如果可能)的正确解释。

我了解有些人可能想实际查看marathon.csv,但是我不确定如何分享。我向您保证,它与marathon10.csv完全相同,但有2738行,每行的格式都相同,有4个逗号,因此我不明白我如何收到我收到的错误。

非常感谢任何可以提供帮助的人:)

1 个答案:

答案 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填充的列表