我正在调试将输入的excel文件转换为输出的csv文件的程序。 在程序的重新格式化部分,它给出一个错误,提示IndexError:列表索引超出范围。
我放置了一个try-except循环来查看程序在哪里卡住。当程序发现len(x)为45500时,它首先被卡住。但是,我只有12500。我真的很困惑为什么程序会在此时卡住,因为我应该在len(x)的范围内。此外,当除去循环的except部分中的中断以使程序运行完成时,except循环将继续打印出len(x),它是45500,i最终以45499结尾。即使这样,我也应该处于范围。
Make_csv是发生问题的函数;它上方的2个函数是创建矩阵的地方。 Matrix [0]是一个1 x 45500矩阵,它从excel输入文件中读取第一列数据。 Matrix [1]是读取文件第二列的1 x 12500矩阵。
感谢您的帮助。
def create_mat(columns, sets):
matrix = []
for i in range(sets):
ncolT = "Time%d" % (i + 1) # from 1 to ..
ncolD = "Data%d" % (i + 1) # from 1 to ..
if len(columns[ncolT]) == len(columns[ncolD]):
length = len(columns[ncolT])
x = []
y = []
# read the time
print(ncolD + '--' + ncolT)
svline = 0
for j in columns[ncolT]:
svline = svline + 1
print(svline)
j = j.replace(',', '.')
'''
while True:
print(j)
except ValueError,j:
print("error")
'''
print(j)
try:
fNum = round(float(j), 1)
except ValueError:
print("error")
x.append(fNum)
# x.append(fNum+0.1)
# read the values measured
for j in columns[ncolD]:
try:
j = j.replace(',', '.')
fNum = float(j)
y.append(fNum)
except ValueError:
print("error")
matrix.append(x)
matrix.append(y)
else:
print("Column sizes are not matching")
return matrix
def unify_dataset(matrix, sets):
uni_x = []
uni_y = []
dt = 0
dy = 0
# align y values at zero
dy = matrix[1][0]
# unify partial measurements
for i in range(sets):
cur_x = matrix[2 * i]
cur_y = matrix[2 * i + 1]
if i > 0:
dt += cur_x[len(cur_x) - 1]
for j in range(len(cur_x)):
uni_x.append(cur_x[j] + dt)
for j in range(len(cur_y)):
uni_y.append(cur_y[j] - dy)
print(uni_y[j])
# Extent the end of the measurement
timer = uni_x[-1]
last = uni_y[-1]
drop_const = (uni_y[-10] - uni_y[-1]) / (0.2 * 10)
print(timer)
print(last)
print(drop_const)
print("debug")
matrix = []
matrix.append(uni_x)
matrix.append(uni_y)
print(matrix)
print(matrix[0])
print(matrix[1])
return matrix
def make_csv(filename, headers, matrix):
with open(filename, 'w') as csvfile:
spamwriter = csv.writer(csvfile, delimiter='\t', quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(["time (s)", "response (nm)"])
x = matrix[0]
y = matrix[1]
print(len(y))
for i in range(len(x)):
try:
xstr = "%.1f" % (x[i])
xstr = xstr.replace('.', ',')
ystr = "%.4f" % (y[i])
ystr = ystr.replace('.', ',')
spamwriter.writerow([xstr, ystr])
except IndexError:
print("index error")
print(len(x))
print(i)
#break