python - 在多个文件夹上运行 Python 脚本
问题描述
今天我使用 Python 脚本,该脚本获取文件夹内的多个 CSV 文件,并生成一个 CSV 输出文件,其中包含按列的平均值,此外我还有多个类似的文件夹。但是我所做的是手动更改文件夹的名称和输出文件的名称,正如您可以想象的那样,这个过程非常困难。我正在寻找的是为每个文件夹执行此操作,尊重每个输出文件的名称和内容中每个相应文件夹的顺序和名称。
我正在尝试在我的 python 脚本中使用下一个
scriptname,f1name,f2name = sys.argv
我也使用 bash 脚本来制作它,但是在这个 bash 脚本中,我可以更改 python 脚本以在文件夹内的多个文件上运行它,但不能用于多个文件夹
#!/usr/bin/env bash
find ./escen10 -type f -name '*.csv' -print0 |
while IFS= read -r -d $'\0' line; do
nname=$(echo "$line" | sed "s/ecn/encn/")
python3 generator2.py $line $nname
done
python脚本是下一个:
import os
import sys
from os import listdir
from csv import DictReader
from os import walk
from os import scandir
import numpy as np
import pandas as pd
scriptname,f1name,f2name = sys.argv
#delimiter = ';'
#dataInFolderPath = './nodes_escen1_1/'
#outputFile = 'results_escen1_1.csv'
delimiter = ';'
dataInFolderPath = f1name
outputFile = f2name
dataInFiles = sorted(listdir(dataInFolderPath),key=lambda x: int(x.split('_')[1]))
#sorted_files = sorted(dataInFolderPath)
lines = []
nodes = {}
for fileName in dataInFiles:
file = open(dataInFolderPath + fileName)
data = DictReader(file, delimiter=delimiter)
for line in data:
if not line['node_code'] in nodes.keys():
nodes[line['node_code']] = []
nodes[line['node_code']].append([
line['node_code'],
line['throughput[Mbps]'],
line['data_packets_sent'],
line['data_packets_lost'],
line['rts_cts_sent'],
line['rts_cts_lost']
])
file.close()
output = ''
maxData = max([len(nodes[n]) for n in nodes])
keys = list(nodes.keys())
keys.sort()
for i in range(maxData):
if i == 0:
output += ';'.join(['node_code;throughput[Mbps];Data packets_sent;Data_packets lost;rts_cts_sent;rts_cts_lost'] * len(keys)) + '\n'
for key in keys:
if key != keys[0]:
output += ';'
if i >= len(nodes[key]):
output += ';;;;;'
continue
output += ';'.join(nodes[key][i])
output += '\n'
f = open(outputFile, 'w')
f.write(output)
f.close()
data = pd.read_csv(outputFile,sep=';')
data = data.append({'node_code':"Promedio"},ignore_index=True)
lenght = len(data["node_code"])
for i in range(len(data.columns)//6):
if i ==0:
data['throughput[Mbps]'].iloc[lenght-1] = np.average(data['throughput[Mbps]'][:-1])
else:
data['throughput[Mbps].%i'%i].iloc[lenght-1] = np.average(data['throughput[Mbps].%i'%i][:-1])
data.to_csv(outputFile,sep=';')
print(outputFile)
出于这个原因,我希望你能帮助我自动化这个过程,使用我可用的或其他更有效的解决方案来实现这个任务,提前感谢你的任何有用的帮助,问候!
解决方案
推荐阅读
- go - 无法在 go 中声明嵌入式结构的字段
- java - 避免 WorkManager 立即运行?
- php - 一个新手 PHP 问题 - 从 URL 中隐藏 PHP 变量
- php - 在 PHP 数组赋值中抛出一个奇怪的错误
- python - 如何更改导致烧瓶中的 TypeError 的 Python 函数
- web - 无法连接到我的应用程序服务器上的本地主机,但可以通过网络访问它
- prestashop - prestashop 自定义计算添加到基本价格
- python - 如何强制 withColumn 按时间顺序逐行工作?
- c# - 堆栈中的每个对象都为空
- delphi - TCard 类没有公开的 OnShow 和 OnHide 事件