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

时间:2018-08-07 17:13:42

标签: python

我正在调试将输入的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

0 个答案:

没有答案