列出索引超出范围(有时失败有时有效)

时间:2019-04-08 09:55:44

标签: python

我正在从文件中读取数据。内容:time-id-data, 当我在MAC上运行时,它运行良好,但是在Linux上,有时它有时会失败。 错误是“ IndexError:列表索引超出范围” 像这样的数据:

enter image description here

' 1554196690 0.0 178 180 180 178 178 178 180

1554196690 0.1 178 180 178 180 180 178 178

1554196690 0.2 175171178178173173178172

1554196690 0.3 171175175175 17b 179177 17e

1554196691 0.4 0 d3

1554196691 0.50 28:10:4:92:a:0:0:d6 395

1554196691 0.58 28:a2:23:93:a:0:0:99 385 '
data = []
boardID=100 #how many lines at most in datafile
for i in range(8):
    data.append([[] for x in range(8)])#5 boards,every boards have 7 sensors add 1-boardID

time_stamp = []
time_xlabel=[]
time_second=[]
for i in range(8):
    time_stamp.append([]) #5th-lines data is the input voltage and pressure
    time_xlabel.append([])#for x label
    time_second.append([])#time from timestamp to time(start-time is 0)

with open("Potting_20190402-111807.txt","r") as eboardfile:
    for line in eboardfile:
        values = line.strip().split("\t")
        boardID=int(round(float(values[1])%1*10)) #define board, 0-3 is the electronBoards, board4-pressure sensor, board5-temperature sensor located inside house not on eboard.
        time_stamp[boardID].append(int(values[0]))

        if boardID >= 0 and boardID < 4:
            for i in range(2,9):
                data[boardID][i-2].append(int(values[i],16) * 0.0625)

        if boardID==4:#pressure
            data[boardID][0].append( int(values[2],16) * 5./1024. *14.2/2.2)            #voltage divider: 12k + 2.2k
            data[boardID][1].append( (int(values[3],16) * 5./1024. - 0.5) / 4.*6.9*1000.)      #adc to volt: value * 5V/1024, volt to hpa: (Vout - 0.5V)/4V *6.9bar * 1000i

        elif boardID > 4 and boardID < 7: #temperature sensor located inside house not no electronBoards
            data[boardID][0].append(int(values[4],10) * 0.0625)#values[2] is the address,[3]-empty;[4]is the valueself.
eboardfile.close()

 Traceback(most recent call last):
      boardID=int(round(float(values[1])%1*10)) #define board, 0-3 is the electronBoards, board4-pressure sensor, board5-temperature sensor located inside house not on eboard.
IndexError: list index out of range

1 个答案:

答案 0 :(得分:0)

Traceback(most recent call last):
      boardID=int(round(float(values[1])%1*10)) #define board, 0-3 is the electronBoards, board4-pressure sensor, board5-temperature sensor located inside house not on eboard.
IndexError: list index out of range

当您的values的元素少于一个时,即表示values = line.strip().split("\t")line根本没有\t时,会发生此错误。

也许是空行?或linux格式问题。

您可以在使用前检查len中的values

if len(values) < 9:
    continue

或尝试以下操作:

import string
values = line.strip().split(string.whitespace)

无法重现您的病情,因此请尝试一下。