处理“大”csv文件时接收看似随机的IndexErrors

时间:2016-04-26 10:19:52

标签: python csv

我目前正在处理一个脚本来处理~60-70 MB的csv文件。首先,我从一个标签文件中翻译csv文件(不是必需的,但不管怎样,这里不是问题)。在下一步中,我将通过csv的行来做两件事:
1)检查第二列中的值。如果此值自最后一行以来已更改,请创建新的输出文件 2)将当前行的一些列值传输到输出文件。 我有几个脚本自动完成的选项卡文件。它对大多数人来说都很好,但有时我会得到......

IndexError: list index out of range    

......没有明显的原因。我查看了它正在拆分的csv文件,错误前后的行看起来一样。

我尝试通过尝试/除了outputWriter来解决至少一些错误(由于我不想丢失数据而已经不是最理想的)。但是我从另一行代码中得到了同样的错误,该代码也处理索引变量。

举个例子,这是脚本停止之前输出文件中的最后三行:

154881105,-0.293776585182967
154883302,0.168302231277491
154883397,0.175177022786097

以下是它正在阅读的相应行以及应该是下一行:

87018,23,154881105,-0.293776585182967
87019,23,154883302,0.168302231277491  
87020,23,154883397,0.175177022786097
87021,23,154883513,0.949924732250711

我错过了什么吗?我没有看到任何理由为什么索引应该超出范围。

最后,这是我的代码中应该相关的部分:

        with open (newCsv, 'rU') as csvfile: 

        plotlist = csv.reader(csvfile, delimiter=',', dialect=csv.excel_tab)

        x = 0

        for i, row in enumerate(plotlist):

            if is_number(row[1]):

                if row[1] != x:
                    x = row[1]
                    fileName = "sample" + str(x) + ".csv"
                    outputFile = open(fileName, "w")
                    outputWriter = csv.writer(outputFile)
                    outputWriter.writerow(["y","x"])

                outputWriter.writerow([row[2], row[3]])

任何人都知道这里出了什么问题?

2 个答案:

答案 0 :(得分:1)

这些行只有2个项目:但是您正在使用索引[3]。超出范围。 (?)

答案 1 :(得分:1)

以下错误明确告诉您,确定您获得的列表实际上并未出现在列表中:

IndexError: list index out of range    

因此,为了更好的调试,您可以在错误之前逐步跟踪:

if len(row)<=3: 
    print "Here's the culprit: %s" % row

您几乎可以看到上述代码的问题:)