Python 如何有效地分离不同大小的数据输入?

Python 如何有效地分离不同大小的数据输入?,python,filter,pcap,organization,Python,Filter,Pcap,Organization,我正在尝试编写一个程序,它接收pcap文件,通过应用程序tshark过滤数据包数据,并将数据输出到字典中,分离各个数据包。我的分离部分有问题 以下是我到目前为止的基本情况: #example data input records = ["Jamie,20,12/09/1997,Henry,15,05/12/2002,Harriot,22,11/02/1995"] dict = {} list1 = str(records).split(',') i = 0 #seperates list in

我正在尝试编写一个程序,它接收pcap文件,通过应用程序tshark过滤数据包数据,并将数据输出到字典中,分离各个数据包。我的分离部分有问题

以下是我到目前为止的基本情况:

#example data input
records = ["Jamie,20,12/09/1997,Henry,15,05/12/2002,Harriot,22,11/02/1995"]

dict = {}
list1 = str(records).split(',')
i = 0
#seperates list into sublists with length "3"
list1 = [list1[i:i + 3] for i in range(0, len(list1), 3)] 

#places the sublists into a dictionary
for i in range (0,len(fields)): #places the sublists into dictionary
    dict[i] = list1[i][0].split(',') + list1[i][1].split(',') + list1[i][2].split(',')

print(dict)
输出如下所示:

{0: ["['Jamie", '20', '12/09/1997'], 1: ['Henry', '15', '05/12/2002'], 2: ['Harriot', '22', "11/02/1995']"]}
我知道我的代码有很多缺陷和混乱。为了从每行中存储和获取更多数据,您需要手动将每个附加字段添加到字典中,同时必须更改拆分列表的位置。对于如何更好地自动化这一过程,考虑到不同大小的输入,将不胜感激。如果我解释得不好,就问我

编辑:下面是我用来调用tshark的代码。前一个代码的输入被“输出”转换为字符串。上一个示例中的姓名、年龄和出生日期表示ip源、ip目标和协议

filters = ["-e","ip.src"," -e ","ip.dst"," -e ","_ws.col.Protocol] #Specifies the metadeta to be extracted

tsharkCall = ["tshark.exe", "-r", inputpcap, "-T", "fields", filters]
tsharkProc = subprocess.Popen(tsharkCall, stdout=subprocess.PIPE)

out, err= tsharkProc.communicate()

考虑如下情况:

filters = ["ip.src","ip.dst","_ws.col.Protocol"] #Specifies the metadeta to be extracted
ex_base = 'tshark.exe -r {path} -Tfields {fields}'
ex = ex_base.format(path=myfile, fields=' '.join('-e ' + f for f in filters))
tsharkProc = subprocess.Popen(ex.split(), stdout=subprocess.PIPE, universal_newlines=True)

out, err= tsharkProc.communicate()

split_records = [line.split('\t') for line in out.split('\n')]
records = [dict(zip(filters, line)) for line in split_records]

# [{'ip.src': '127.0.0.1', 'ip.dst': '192.168.0.1', '_ws.col.Protocol': 'something'}, {...}, ...]
这假定您保留默认的输出分隔符,即记录之间的换行符和字段之间的制表符。通过根据输出记录压缩字段数组,在将新字段添加到该数组时,您将自动扩展字典以适应新字段

请注意,您也可以使用熊猫,以便优雅地解决此问题,如:

import pandas as pd
records = pd.Dataframe(split_records, columns=filters)

这将为您提供一个数据帧结构,根据您的应用程序,该结构可能会很有用。

请尝试
lst=records[0]。拆分(“,”)
。不要调用列表
list
,因为它是python内置的。但目前,您正在将一项列表转换为其字符串表示形式,然后再拆分它。除此之外,我真的不知道你在问什么。什么是
字段
?是否总是有字符串,每个字符串包含三行数据,或者这只是一个示例?是否有任何方法可以为每行获取不同的分隔符,例如
\n
而不是
?您确定记录的格式正确吗?它真的是一个包含单个字符串的列表吗?什么是
字段
?我看不到你的代码…谢谢!我似乎无法让压缩部分工作,但我得到了错误“'bytes'对象没有属性'read'”。啊,对不起,我没有太多使用子进程,并假设
通信
返回流。我已经用我认为应该解决问题的方法更新了答案