将 PCAP 文件的一个字段解析为 Python 中的一列

Parsing one field of PCAP file into a column in Python

我目前正在处理 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 文件的所有行中。我想在任何可用的地方解析该值,当它不可用时,我想给出一个 "None" 的值。我可以打印如下内容,

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 None None None

谁能帮我处理异常并将所有值放入变量中?

使用带有条件表达式的列表理解:

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

或使用.get()调用;它允许您将默认值指定为 return,但默认值为 None,因此无需指定它。

a = [i.get('TCP') for i in pcap_file]

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

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)