使用必需的列python

时间:2019-07-15 12:01:28

标签: python python-3.x csv wireshark pcap

如何将.pcap文件更改为带有我想要的列列表的csv文件(例如:wlan.sa,wlan.ra,frame.len)?输出的csv文件需要与输入的.pcap文件具有相同的名称。所有输出文件都需要写入单独的文件夹中。并且会像原始pcap文件一样被分成子文件夹。我是编程新手。请帮忙。我只知道如何在文件夹和子文件夹中获取文件。

import csv
import os

startdir = 'in.d'    
outdir = 'out.d'
suffix = '.pcap'

for root, dirs, files in os.walk(startdir):
    for name in files:
        if not name.endswith(suffix):

2 个答案:

答案 0 :(得分:1)

如果尝试在其他位置重新创建文件夹结构,则需要确保已创建文件夹。可以使用os.makedirs()命令来完成。可以通过使用比startdir更深的任何路径来确定子文件夹的结构。然后可以将其附加到您的outputdir位置。

也可以使用os.path.splitext()替换文件扩展名。

例如:

import os

startdir = '/root/Desktop/TTT'
suffix= '.pcap'
outputdir = os.path.join(startdir, "Outcsv")

for root, dirs, files, in os.walk(startdir):
    for name in files:
        if name.lower().endswith(suffix):
            sub_folders = root[len(startdir)+1:]

            input_filename = os.path.join(root, name)
            output_path = os.path.join(outputdir, sub_folders)
            os.makedirs(output_path, exist_ok=True)  # Ensure the output folder exists
            output_filename = os.path.join(output_path, os.path.splitext(name)[0] + '.csv')

            cmd = 'tshark -r {} -T fields -e frame.number -e frame.time_relative -e wlan.sa -e wlan.da -e wlan.ta -e wlan.ra -e frame.time_delta_displayed -e frame.len -E header=y -E separator=, -E quote=d -E occurrence=f > {}'
            final_cmd = cmd.format(input_filename, output_filename)

            print(final_cmd)
            os.system(final_cmd)

答案 1 :(得分:0)

致电tshark,(类似这样)

f_in = 'x.pcap'
f_out = 'x.csv'
tshark_template = 'tshark -r {} -T fields -e frame.number -e frame.time -e eth.src -e eth.dst -e ip.src -e ip.dst -e ip.proto -E header=y -E separator=, -E quote=d -E occurrence=f > {}'
final_tshark_cmd = tshark_template.format(f_in,f_out)

使用python动态构建命令,因此您可以控制文件名。

每个-e代表要在输出中显示的字段。