回溯(最近的调用最后出错):文件"None",第18行,在<module> 中 IndexError:列表索引超出范围

-1 投票
2 回答
2692 浏览
提问于 2025-04-18 04:19
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])

我不完全明白你在尝试做什么,但这个代码会检查这个项目之前是否已经存在。如果没有,它会创建一个空列表来添加内容。然后它会把这个条目添加进去。

撰写回答