处理数据文件时列出索引超出范围错误

时间:2016-05-15 19:17:34

标签: python

我有一系列包含2列的数据文件(picture),其中第一行的格式与文件的其余部分不同。我试图将2列中的每一列都变成他们自己的列表(忽略第一行),但我不断得到'列表索引超出范围'错误,我无法弄清楚为什么......

我有非常有限的编程经验,所以为代码的混乱道歉。

file_name_pre = 'spa000'
first_file = '7'
last_file = '28'
file_suffix = '.txt'
a = int(first_file)
b = int(last_file)
file_num = a
x_val = []
y_val = []

for i in range(a, a + 1):
    file = file_name_pre + str(file_num).zfill(2) + file_suffix
    hndl = open(str(file), 'rt')
    data = hndl.readlines()
    time = float(data[0])
    time_col.append(time)
    c = len(data)
    for j in range(1, c + 1):
        x = float(data[j].split()[0])  #error on this line
        x_val.append(x)
        y = float(data[j].split()[1])
        y_val.append(y)
hndl.close()

4 个答案:

答案 0 :(得分:1)

尝试替换此行

for j in range(1, c + 1):

到这个

for j in range(1, c):

您的数据从索引0开始而不是1

答案 1 :(得分:1)

最有可能range(1, c+1)应该阅读range(1, c)

答案 2 :(得分:0)

您的错误位于以下行for j in range(1, c + 1),如果您选中range doc,您会发现:{/ p>

  

范围签名如下range(start, stop[, step]),最后一个元素是最大start + i * step大于停止。如果未按照您的情况指定步骤,则最后一个索引将为stop - 1

在你的情况下,

c是一个列表长度:len(data),因为python列表是基于0的索引,所以最后一个有效索引应该是c - 1并考虑range你应该替换的逻辑:

for j in range(1, c + 1)

由:

for j in range(1, c)

答案 3 :(得分:0)

以下是基于NumPy的替代技术:

档案file.txt

something
1. 11.
2. 22.
3. 33.
4. 44.
5. 54.

脚本:

import numpy as np

data = np.genfromtxt('file.txt', skip_header=1, usecols=(0,1), dtype=np.float32, autostrip=True)
data = np.swapaxes(data, 0, 1) # swap the axes

print data[0] # 1st line: [ 1.  2.  3.  4.  5.]
print data[1] # 2nd line: [ 11.  22.  33.  44.  54.]

这是一种清晰而快速的方法,随意使用它。