13.处理指定目录下的所有文件夹里的特定文件

本文描述了一个Python脚本,用于从指定4K_phone目录下的quality_xx文件夹中提取1_teacher.txt文件的特定列数据,对小于35ms的transmissiontime进行处理,并将结果保存到以文件夹名称命名的新txt文件中。脚本还包含了目录结构检查和异常处理的部分内容。
摘要由CSDN通过智能技术生成

1.命题要求

1)对于指定4K_phone目录下,有好几个文件夹,比如quality_15,quality_17,quality_19,等等quality_xx。获取每一个quality_xx文件夹里的1_teacher.txt
例如,./4K_phone/quality_15/1_teacher.txt、./4K_phone/quality_17/1_teacher.txt 和 ./4K_phone/quality_19/1_teacher.txt,
2)对每一个文件夹里的特定文件1_teacher.txt的第2列和第3列数据进行处理,并将处理后数据保存到一个以当前文件夹名称命名的txt文件中。
例如,如果当前文件夹的名称是 quality_15,那么数据将被保存到名为 4K_phone_quality_15.txt 的文件中。

电脑目录结构图:
在这里插入图片描述
在vscode 编辑器里的树状图:
在这里插入图片描述
1_teacher.txt 文档里的内容形式
在这里插入图片描述

2.代码实现

import os
import glob

'''
breif: 统计不同quality level下,transmission time,结果保留2位小数
输入:服务器上report文件夹里的各个实验数据txt文件 ,such as 1_teacher.txt
输出: processed_data.txt
注意:程序会对传输延迟小于35ms的数据进行过滤处理
'''
# 获取当前脚本所在的目录路径
current_directory = os.path.dirname(os.path.abspath(__file__))
# 切换到当前目录
os.chdir(current_directory)


# 指定目录
subdirectories = os.listdir(current_directory)
#打印出 ./4K_phone 目录下的所有子文件夹的名称。
print(subdirectories)
# 获取所有1_teacher.txt文件的路径
file_paths = glob.glob(os.path.join(current_directory, '*/1_teacher.txt'))
# print(file_paths)

# 遍历所有找到的文件路径
for file_path in file_paths:
    # 获取当前目录的名称
    current_dir = os.path.basename(os.path.dirname(file_path))
    
    # 设置目标文件名
    process_filename = f'4K_phone_{current_dir}.txt'

    # 打开目标文本文件
    with open(process_filename, 'w') as output_file:
        # 打开原始文本文件
        with open(file_path, 'r') as file:
            for line in file:
                # 拆分每行数据
                data = line.strip('\n').split(',')

                # 获取第一种和第三种数据类型的值
                data_type_2 = int(data[2])  # display quality
                data_type_3 = float(data[3])  # transmission time

                # 筛选数据
                transmission_time_limit = 35.0  # 为了控制两者之和不要过大,筛选数据
                if data_type_2 > 0 and data_type_3 > 0 and data_type_3 < transmission_time_limit:
                    # 添加映射值到第三种数据类型上,保留2为小数
                    new_data_type_3 = round(data_type_3, 2)

                    # 将处理后的数据写入目标文本文件
                    output_file.write(f'{new_data_type_3}\n')

这段代码会遍历指定目录下的所有文件夹,对于每个文件夹,它都会找到 1_teacher.txt 文件,并将数据保存到一个以当前文件夹名称命名的文件中。
在这里插入图片描述

3.注意点

如果 file_paths 列表是空的,那么可能的原因是:

./4K_phone 目录不存在,或者它的名字被错误地写成了其他名字。
./4K_phone 目录下没有任何子文件夹。
./4K_phone 的子文件夹下没有 1_teacher.txt 文件。
可以使用以下代码来检查 ./4K_phone 目录下的子文件夹:

import os

directory = './4K_phone'
subdirectories = os.listdir(directory)
print(subdirectories)

这将打印出 ./4K_phone 目录下的所有子文件夹的名称。

然后,可以检查每个子文件夹下是否存在 1_teacher.txt 文件

for subdir in subdirectories:
    subdirectory_path = os.path.join(directory, subdir)
    if os.path.isdir(subdirectory_path):
        file_path = os.path.join(subdirectory_path, '1_teacher.txt')
        if os.path.isfile(file_path):
            print(f'Found {file_path}')
        else:
            print(f'{file_path} does not exist')

这将为每个子文件夹打印出是否存在 1_teacher.txt 文件。

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值