我有一系列包含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()
答案 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.]
这是一种清晰而快速的方法,随意使用它。