python - 遍历目录中的所有文件并从每个文件中获取平均值
问题描述
我在一个目录中有几个文件,我想将所有文件第一列中第一个和最后一个数字的平均值打印到一个文件中。请问该怎么做?
此代码不完整:
# giving names of all files in a directory to the file files.txt - OK
import os
files = os.listdir("/media/linux/DATADISK")
with open('files.txt', 'w') as f:
for item in files:
f.write("%s\n" % item)
# loading the first column of all files into lists or dataframes with the name/key according files.txt and save average value to file average.txt
for i in files:
np.loadtext(f' . ', unpack=True, usecols=[0]))
average = (list[0]+list[-1])/2
print(average, , file=open("average.txt","a"))
我不知道如何编写for
应该加载文件的第二个循环(第一列),计算最后一个值和第一个值的平均值,并将其写入文件。它应该对目录中的所有文件执行此操作。我不知道如何写文件名——它们有不同的名称和相同的扩展名。
例如,目录中有 2 个文件:klj.txt 和 gdf.dat
klj.txt
4 6
6 5
6 1
gdf.dat
4 5
2 0
8 1
输出 average.txt 应该是:
5
6
解决方案
首先,您不需要将文件写入files.txt的单独循环。您可以将整个操作作为os.listdir
循环的一部分进行。您只需要形成每个文件的完整路径(np.loadtxt
稍后需要传递的路径)。像这样:
import os
data_path = os.path.abspath("/media/linux/DATADISK")
for f in os.listdir(data_path):
f_path = os.path.join(data_path, f)
print(f_path)
# Output:
# /media/linux/DATADISK/gdf.dat
# /media/linux/DATADISK/klj.txt
然后,您可以使用delimiter
参数 ofnp.loadtxt
指定每个文件的每一行用空格分隔。如果您只对第一列感兴趣,您输入的usecols
参数已经正确。
data = np.loadtxt(f_path, delimiter=' ', usecols=0)
print(data)
# Output:
# /media/linux/DATADISK/gdf.dat
# [4. 2. 8.]
# /media/linux/DATADISK/klj.txt
# [4. 6. 6.]
那么你已经把代码的平均部分正确了。但我建议先打开average.txt文件,这样您就不需要open
在每个循环中都打开它。
with open("average.txt", "a") as output:
for f in os.listdir(data_path):
...
average = (data[0] + data[-1]) / 2
output.write(str(average) + "\n")
把它们放在一起:
import numpy as np
import os
data_path = os.path.abspath("/media/linux/DATADISK")
with open("average.txt", "a") as output:
for f in os.listdir(data_path):
f_path = os.path.join(data_path, f)
data = np.loadtxt(f_path, delimiter=' ', usecols=0)
average = (data[0] + data[-1]) / 2
output.write(str(average) + "\n")
样本平均.txt:
6.0
5.0
订单将取决于 的返回os.listdir
,因此gdf.bat将在klj.txt之前处理。
推荐阅读
- reactjs - React Admin - 在未找到 API 响应时处理数据
- c - 3次握手文件传输
- r - 在 R Plotly 中修改单个刻度标签
- sublimetext3 - 在 sublime text 3 中的不同项目窗口之间切换
- python - 计算字典中项目的频率
- ios - 十六进制(长字符串)l 转二进制
- firebase - Firebase 数据库规则中允许写入和允许创建更新之间的区别
- postgresql - Postgres CREATE/DROP DATABASE 有时会导致语法错误
- android - Android Studio 进程扫描文件以永久循环索引
- google-cloud-platform - GCP:Pony ORM 能否与 Cloud Functions 和 Cloud SQL 一起使用