1.要求
1)读取指定txt文档,对里面的所有数据求和并算出平均值mean value;
2)算平均值时,先对txt文档里的数据做处理,只统计数值小于40.0的数据,把过滤出的数据保存为新的txt文档
3) 对新的文档统计文件的行数。
文件结构
待处理的txt文档内容
2.实现
import os
"""
@brief: 过滤数据
@param: source_file: 源文件名
@param: target_file: 目标文件名
@return: 无返回值
@note: 过滤掉数据小于40.0的数据
"""
def filter_data(source_file, target_file):
# 获取当前脚本所在的目录路径
current_directory = os.path.dirname(os.path.abspath(__file__))
# 切换到当前目录
os.chdir(current_directory)
# 以读模式打开源文件
with open(source_file, 'r') as file:
lines = file.readlines()
# 创建一个列表来保存满足条件的数据
new_data = []
for line in lines:
# 尝试将行数据转换为浮点数
try:
data = float(line.strip().split("\n")[0])
# 如果数据< 40.0,则添加到新数据列表中
if data < 40:
# data = data - 1.0
new_data.append(data)
except ValueError:
# 如果不能转换为浮点数,则跳过该行
continue
# 以写模式打开目标文件
with open(target_file, 'w') as file:
for data in new_data:
file.write(f'{data}\n')
"""
@brief: 计算平均值和文件长度
@param: target_file: 目标文件名
@return: 平均值和文件长度
@note: 计算文件中数据的平均值和文件长度
"""
def calculate_average(target_file):
# 以读模式打开目标文件
with open(target_file, 'r') as file:
lines = file.readlines()
# 计算数据的总和
total = sum(float(line.strip().split("\n")[0]) for line in lines)
# 计算平均值
average = total / len(lines)
# 计算文件长度
file_length = len(lines)
return average, file_length
# 调用函数进行数据过滤
source_file_1 = '4K_phone_decoding_quality_15.txt'
target_file_1 = '4K_phone_decoding_quality_15_new.txt'
filter_data(source_file_1, target_file_1)
source_file_2 = '4K_phone_decoding_quality_17.txt'
target_file_2 = '4K_phone_decoding_quality_17_new.txt'
filter_data(source_file_2, target_file_2)
source_file_3 = '4K_phone_decoding_quality_19.txt'
target_file_3 = '4K_phone_decoding_quality_19_new.txt'
filter_data(source_file_3, target_file_3)
# 调用函数计算平均值和文件长度
average_1, length_1 = calculate_average(target_file_1)
print(f'{target_file_1}的平均值为:{average_1},文件长度为:{length_1}')
average_2, length_2 = calculate_average(target_file_2)
print(f'{target_file_2}的平均值为:{average_2},文件长度为:{length_2}')
average_3, length_3 = calculate_average(target_file_3)
print(f'{target_file_3}的平均值为:{average_3},文件长度为:{length_3}')
首先通过filter_data函数对原始文件进行过滤,然后再通过calculate_average函数计算每个过滤后文件的平均值,返回文件的长度。
输出