我正在尝试解析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的文件大小写入。我不确定这到底发生了什么。也许某些内存问题存在问题,我不明白。任何帮助将不胜感激。
答案 0 :(得分:0)
不是解决方案(无法评论),但请尝试捕获IndexError并打印vals[line]
的内容。 vals
是如何创建的? [data1, data2]
期间是vals
保证的吗?