不同的文件夹和子文件夹中的csv
文件很少。我需要将每个csv
文件分隔为传入和传出流量。
如果源== ac:37:43:9b:92:24 &&接收方地址== 8c:15:c7:3a:d0:1a然后需要将这些行写入.out.csv 文件。
如果发送器地址== 8c:15:c7:3a:d0:1a &&目标== ac:37:43:9b:92:24然后需要将这些行写入.in.csv 文件。
输出文件(作为传入和传出分隔的文件)必须具有与输入文件相同的名称(例如:如果输入文件为aaa.csv,则输出文件将为aaa.in.csv和aaa.out。 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= [if 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= [if Transmitter address == 8c:15:c7:3a:d0:1a && Destination== ac:37:43:9b:92:24],
in_file=in_file,
new_suffix='.in.csv'
)
答案 0 :(得分:0)
您可以利用Python的CSV库来处理行,而glob.glob
可以用于遍历文件。 os.path.splitext()
可用于帮助更改文件扩展名。例如:
import csv
import glob
import os
for filename in glob.glob('**/*.csv', recursive=True):
basename, extension = os.path.splitext(filename)
print(f"Processing - {filename}")
with open(filename, encoding='utf-8') as f_input, \
open(basename + '.in.csv', 'w', newline='', encoding='utf-8') as f_in, \
open(basename + '.out.csv', 'w', newline='', encoding='utf-8') as f_out:
csv_input = csv.reader(f_input)
csv_in = csv.writer(f_in)
csv_out = csv.writer(f_out)
for row in csv_input:
if row[3] == 'ac:37:43:9b:92:24' and row[4] == '8c:15:c7:3a:d0:1a':
csv_out.writerow(row)
if row[5] == '8c:15:c7:3a:d0:1a' and row[6] == 'ac:37:43:9b:92:24':
csv_in.writerow(row)
这假定您的CSV文件采用标准格式,例如aaa,bbb,ccc,ddd
。 csv.reader()
将读取文件的每一行,并将其转换为自动以逗号分隔的值列表。因此,每行的第一个值是row[0]
。