写入文件时列出索引超出范围

时间:2016-02-17 20:03:06

标签: python list python-2.7 csv indexing

我正在尝试解析CSV文件以获取三个特定的数据列。该文件非常大(135MB)。我已将必要的数据放在格式

的列表中
vals = [[data1,data2],[data1,data2],...]]. 

这是我用来写一个单独的CSV的函数:

def write_file(run_name,input_name,start_time,dt,vals):
    with open(run_name,'w') as f:
        f.write("Time,%s,%s\n" % (input_name[0],input_name[1]))
        f.write("%.6f,%s,%s\n" % (start_time,str(float(vals[0][0])),str(float(vals[0][1]))))
        nextTime = start_time + dt
        for line in vals:
            f.write("%.6f,%s,%s\n" % (nextTime,str(float(line[0])),str(float(line[1]))))
            nextTime = nextTime + dt

    print("Done writing")

其中run_name是新的CSV名称,input_name是通道名称(data1,data2),开始时间以秒为单位,dt是数据点之间的时间差值,vals是值列表。出于某种原因,每当我运行此代码时,我得到:

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "tdmsParse.py", line 59, in write_file
       f.write("%.6f,%s,%s\n" % (nextTime,str(float(line[0])),str(float(line[1]))))

IndexError: list index out of range

当我用以下内容替换第59行时仍然如此:

def write_file(run_name,input_name,start_time,dt,vals):
    with open(run_name,'w') as f:
        f.write("Time,%s,%s\n" % (input_name[0],input_name[1]))
        f.write("%.6f,%s,%s\n" % (start_time,str(float(vals[0][0])),str(float(vals[0][1]))))
        nextTime = start_time + dt
        for i in range(1,len(vals)):
            f.write("%.6f,%s,%s\n" % (nextTime,str(float(vals[i][0])),str(float(vals[i][1]))))
            nextTime = nextTime + dt

    print("Done writing")

val的长度为5550000.该函数适用于前437294个数据点,但表示超出范围。上述两个函数都停止以每次正好16,536 KB的文件大小写入。我不确定这到底发生了什么。也许某些内存问题存在问题,我不明白。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

不是解决方案(无法评论),但请尝试捕获IndexError并打印vals[line]的内容。 vals是如何创建的? [data1, data2]期间是vals保证的吗?