【问题标题】:Parsing one field of PCAP file into a column in Python将PCAP文件的一个字段解析为Python中的一列
【发布时间】:2017-07-11 21:17:28
【问题描述】:

我目前正在处理一个 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 没有任何 没有任何 无

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

【问题讨论】:

  • if 'TCP' in i:

标签: python python-2.7 python-3.x pyshark


【解决方案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]

【讨论】:

    【解决方案2】:

    虽然@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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-22
      • 2016-04-07
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多