Python列表索引在范围内时超出范围

2024-09-30 01:37:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在调试我的程序将输入的excel文件转换成输出的csv文件。 在程序的重新格式化部分,它给出了一个错误:IndexError:list index out of range。你知道吗

我放了一个try-except循环,看看程序在哪里卡住了。当程序发现len(x)是45500时,它首先被卡住;然而,i只有12500。我真的很困惑,既然我应该在len(x)的范围内,为什么程序会在这一点上卡住。此外,当循环的except部分中的中断被移除以允许程序运行完成时,except循环继续打印len(x),len(x)是45500,i最终在45499结束。即使这样,我也应该在这个范围内。你知道吗

Make_csv是发生问题的函数;上面的两个函数是创建矩阵的函数。矩阵[0]是一个1 x 45500的矩阵,从excel输入文件中读取第一列数据。矩阵[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

Tags: columnscsvin程序forlenrange矩阵

热门问题