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 qualitydata_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 osdirectory = './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 文件。