将 csv 文件转换为单独的文件

确切地

我需要根据列值将几个 csv 文件与传入和传出流量分开。此代码不提供任何输出或任何错误。

如果 source == ac:37:43:9b:92:24 && Receiver address == 8c:15:c7:3a:d0:1a 那么这些行需要写入 .out.csv 文件。

如果 Transmitter address == 8c:15:c7:3a:d0:1a && Destination== ac:37:43:9b:92:24 那么这些行需要写入 .in.csv 文件。

import csv
import os
import subprocess

startdir = '.'   
outdir = '.'
suffix = '.csv'

def decode_to_file(cmd, in_file, new_suffix):
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    filename = outdir + '/' + in_file[len(startdir):-len(suffix)] + new_suffix
    os.makedirs(os.path.dirname(filename), exist_ok=True)
    csv_writer = csv.writer(open(filename, 'w'))
    for line_bytes in proc.stdout:
        line_str = line_bytes.decode('utf-8')
        csv_writer.writerow(line_str.strip().split(','))

for root, dirs, files in os.walk(startdir):
    for name in files:
        if not name.endswith(suffix):
            continue
        in_file = os.path.join(root, name)

        decode_to_file(
            cmd= [source== "ac:37:43:9b:92:24" && Receiver address== "8c:15:c7:3a:d0:1a"],
            in_file=in_file,
            new_suffix='.out.csv'
        )
        decode_to_file(
            cmd= [Transmitter address == "8c:15:c7:3a:d0:1a" && Destination== "ac:37:43:9b:92:24"],
            in_file=in_file,
            new_suffix='.in.csv'
        )

在此处输入图片说明

鲍里斯
import csv
from pathlib import Path

startdir = Path(".")
outputdir = startdir / "filtered"


def write_csv(filename, rows, fieldnames):
    # if there's nothing to write, don't write anything
    if not rows:
        return

    filename.parent.mkdir(parents=True, exist_ok=True)
    with open(filename, "w") as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(rows)


for input_filename in startdir.glob("**/*.csv"):
    with open(input_filename) as input_csv:
        inrows = []
        outrows = []

        reader = csv.DictReader(input_csv)
        for row in reader:
            if (
                row["Source address"] == "ac:37:43:9b:92:24"
                and row["Receiver address"] == "8c:15:c7:3a:d0:1a"
            ):
                outrows.append(row)

            if (
                row["Transmitter address"] == "8c:15:c7:3a:d0:1a"
                and row["Destination address"] == "ac:37:43:9b:92:24"
            ):
                inrows.append(row)

        output_filename = outputdir / input_filename.relative_to(startdir)

        write_csv(output_filename.with_suffix(".out.csv"), outrows, reader.fieldnames)
        write_csv(output_filename.with_suffix(".in.csv"), inrows, reader.fieldnames)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章