在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看看
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
应该是这里的
line.split('X')[1].split('K')[0])
导致数组越界