回溯(最近一次调用):文件“None”,第18行,in<module>indexer错误:列表索引超出范围

2024-03-29 01:54:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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行,in 索引器错误:列表索引超出范围


Tags: textinfor错误lineopenuserstemp
2条回答

看起来这应该重写为:

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键的列表(我遇到的所有端口),并按升序对其进行排序;然后打印出每个端口及其总负载。根据您的示例数据,您应该看到

^{pr2}$

希望这有帮助!在

您要附加到不存在的列表元素:

d[i+1].append(a[i])

这相当于:

^{pr2}$

这会给你同样的错误。我不知道你想在d和e中加入什么,但你可以附加到它们的后面,但不能附加到不存在的元素上。在

看来字典是这个应用程序的更好选择。在

d = {}

if i not in d:
    d[i] = []
d[i].append(a[i])

我不完全了解你在尝试什么,但这将检查一下是否已经找到了这个项目。如果没有,它将创建一个空列表以附加到。然后它会附加此项的条目。在

相关问题 更多 >