IndexError: list index out of range

问题遇到的现象和发生背景

在Linux下运行python,将原始数据转换为表格时报错

问题相关代码,请勿粘贴截图
import subprocess

def get_reqsize(line):
    return str(int(line.split('X')[1].split('K')[0]))

def convert_timestamp(line, hour1=0):
    parsed = line.split(':')
    hour = int(parsed[0])
    if hour < hour1:
        hour += 24
    minutes = int(parsed[1])
    return (hour*60 + minutes)*60.0 + float(parsed[2])

class OutputFile():
    def __init__(self, filename, header):
        self.arq = open(filename+".csv", "w")
        self.arq.write(header)
        self.buf = ""
        self.buflimit = 1024*1024
    def write(self, values):
        for value in values:
            self.buf += value
            if value != values[len(values)-1]:
                self.buf += ";"
        self.buf += "\n"
        if len(self.buf) > self.buflimit:
            self.arq.write(self.buf)
            self.buf = ""
    def close(self):
        self.arq.write(self.buf)
        self.arq.close()

servers={}
servers[10] = 1
servers[15] = 2
servers[16] = 3
servers[17] = 4

files = subprocess.getoutput("ls NOOP_app1*/pvfstrace*").split('\n')


csv = OutputFile("pattern_length", "operation;server;repetition;files1;files2;procs2;contig1;contig2;reqsize1;reqsize2;pat_len\n")

for filename in files:
    print(filename)
    #get access pattern from filename
    parsed = filename.split('_')
    contig = [parsed[2], parsed[8]]
    reqsize = [get_reqsize(parsed[3]), get_reqsize(parsed[9])]
    procs = str(int(parsed[10].split('p')[0]))
    nto = [parsed[6], parsed[12]]
    repetition = str(int(parsed[13]))
    server = str(servers[int(filename.split('/')[2].split('.')[0].split('-')[1])])
    parsed = filename.split('.')
    operation = parsed[len(parsed)-1]
    #get start and end timestamps to measure time
    first = subprocess.getoutput("head -n 1 "+filename).split()[1].split(']')[0]
    start = convert_timestamp(first)
    last = subprocess.getoutput("tail -n 1 "+filename).split()[1].split(']')[0]
    hour1 = int(first.split(':')[0])
    end = convert_timestamp(last, hour1)
    time = end - start
    assert time > 0
    #see the number of requests in the trace to estimate requests per second
    leng = int(subprocess.getoutput("wc -l "+filename).split()[0])
    #write the result
    csv.write([operation, server, repetition, nto[0], nto[1], procs, contig[0], contig[1], reqsize[0], reqsize[1], str(leng/time)])

csv.close()    

运行结果及报错内容
NOOP_app1_contig_32reqsX4096KB_32procs_32machines_nto1_10_pvfstrace/pvfstrace_parasilo-10.rennes.grid5000.fr.read
Traceback (most recent call last):
File "count_pattern_length.py", line 49, in <module>
    reqsize = [get_reqsize(parsed[3]), get_reqsize(parsed[9])]
  File "count_pattern_length.py", line 4, in get_reqsize
    return str(int(line.split('X')[1].split('K')[0]))
IndexError: list index out of range

我的解答思路和尝试过的方法

接触编程不久,总是遇到indexerror实在不知道怎么解决

list index out of range
表示访问列表越界了。

reqsize = [get_reqsize(parsed[3]), get_reqsize(parsed[9])]

代码49行,parsed列表长度一定大于9吗?

return str(int(line.split('X')[1].split('K')[0]))

这行中line.split('X')[1]列表下标越界了
应该是line字符串中没有"X"字符
split('X')分割出的列表只有一个元素,没有下标[1]
你输出下line看看

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

应该是这里的
line.split('X')[1].split('K')[0])
导致数组越界