将 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)
我目前正在处理 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)