为了账号安全,请及时绑定邮箱和手机立即绑定

遍历目录中的所有文件并从每个文件中获取平均值

遍历目录中的所有文件并从每个文件中获取平均值

临摹微笑 2022-06-22 17:38:14
我在一个目录中有几个文件,我想将所有文件第一列中第一个和最后一个数字的平均值打印到一个文件中。请问该怎么做?此代码不完整:# giving names of all files in a directory to the file files.txt - OKimport osfiles = 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.txtfor 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.datklj.txt4 6 6 5  6 1gdf.dat4 52 08 1输出 average.txt 应该是:5 6
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

首先,您不需要将文件写入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之前处理。


查看完整回答
反对 回复 2022-06-22
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信