0

我目前正在处理一个 PCAP 文件,并希望将一个特定字段(['TCP'].srcport)导出到一个单独的变量中。并非每一行都存在 ['TCP'].srcport。它出现在前 3 行中,而在剩余的 3 行中不存在。以下是我正在使用的代码,

a = []
l = 0
for i in pcap_file:
    try :
        print l
        print(i['TCP'].srcport)
        a[l] = i['TCP'].srcport
        l = l+1
    except:
         print l
         print 'None'
         a[l] = 0
         l = l+1
         continue

这里的问题是 ['TCP'].srcport 并不存在于 PCAP 文件的所有行中。我想在任何可用的地方解析值,当它不可用时,我想将值设为“无”。我可以打印如下内容,

64
64
64
None
None
None

但是当我将它分配给一个变量时,我收到以下错误,

--> 13         a[l] = "
     14         l = l+1
     15         continue

IndexError: list assignment index out of range

理想情况下,我想要一个名为 l 的变量,

l

64 64 64 无 无 无

任何人都可以帮助我处理异常并将所有值放入变量中吗?

4

2 回答 2

1

使用带有条件表达式的列表推导:

a = [i['TCP'] if 'TCP' in i else None for i in pcap_file]

或使用.get()电话;它允许您指定要返回的默认值,但默认值是None因此无需指定它。

a = [i.get('TCP') for i in pcap_file]
于 2017-07-11T21:24:48.533 回答
0

尽管@Barmar 的回答非常pythonic 和正确。有问题的代码不起作用,因为您试图将一个元素分配给一个索引不存在的列表。应该改用“附加”。下面是有效的代码

import pyshark
cap = pyshark.FileCapture(r'C:\Temp\Samp1.pcap')
a = []
for i in cap:
    try:
        print(i['TCP'].srcport)
        a.append(i['TCP'].srcport)
    except:
        print('None')
        a.append(0)
于 2017-10-17T07:00:21.097 回答