回溯(最近的调用最后出错):文件"None",第18行,在<module> 中 IndexError:列表索引超出范围
text= open("/Users/amanshah/Desktop/hsn/a.tcp","r")
lines=text.readlines()
a=[]
c=[]
d=[]
e=[]
sum1=0
for line in lines:
temp=line.split()
a.append(int(temp[1]))
c.append(int(temp[5]))
for i in range(0,len(a)):
if a[i]==a[i+1]:
sum1=sum1+c[i]
d[i].append(a[i])
e[i].append(sum)
else:
d[i+1].append(a[i])
e[i+1].append(sum1)
print d
打印 e
显示错误
错误追踪(最近的调用记录): 文件 "None",第 18 行,在 IndexError: 列表索引超出范围
2 个回答
0
看起来这个代码应该改成类似这样的:
from collections import defaultdict
INPUT = "/Users/amanshah/Desktop/hsn/a.tcp"
payloads = defaultdict(int)
with open(INPUT) as inf:
for line in inf:
values = line.split()
port = int(values[1])
payload = int(values[5])
payloads[port] += payload
for port in sorted(payloads):
print("{}: {}".format(port, payloads[port]))
编辑:根据你上面的评论,看来你是在扫描一个tcp日志文件,并计算每个端口的总传输量。
所以我创建了一个叫做 payloads
的字典,其中 payloads[port]
用来保存该端口所有传输量的总和;另外,我把它设置成了 defaultdict(int)
,这意味着如果我请求一个我还没见过的端口,比如 payloads[port_I_havent_seen_yet]
,它会自动创建一个新的条目,值为0,而不是抛出一个错误。
接着,我逐行扫描文件,边读边更新 payloads
。
最后,sorted(payloads)
会得到一个 payloads
的键(也就是我遇到的所有端口)的列表,并按升序排序;然后我会打印出每个端口及其总传输量。根据你的示例数据,你应该会看到
1: 156
2: 97
4: 124
5: 241
希望这对你有帮助!
1
你正在尝试向一个不存在的列表元素添加内容:
d[i+1].append(a[i])
这和下面的代码是一样的:
d = []
d[1].append('a')
这样做会出现同样的错误。我不太清楚你想要放入d和e的是什么,但你可以向它们添加内容,但不能向那些不存在的元素添加。
看起来用字典会更适合这个情况。
d = {}
if i not in d:
d[i] = []
d[i].append(a[i])
我不完全明白你在尝试做什么,但这个代码会检查这个项目之前是否已经存在。如果没有,它会创建一个空列表来添加内容。然后它会把这个条目添加进去。