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
追踪(最近一次通话): 文件“无”,第18行,in IndexError:列表索引超出范围
答案 0 :(得分: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])
我对你正在尝试的内容没有完全的了解,但是这将检查以前是否找到了这个项目。如果没有,那么它将创建一个要附加的空列表。然后它会为此附加条目。
答案 1 :(得分: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而不是抛出一个KeyError。
然后我浏览文件的每一行,在我去的时候更新payloads
。
最后,sorted(payloads)
获取payloads
个键的列表(我遇到的所有端口)并按升序对其进行排序;然后我打印出每个端口及其总有效负载。根据您的示例数据,您应该看到
1: 156
2: 97
4: 124
5: 241
希望这有帮助!