14.对指定 txt文件里的特定列数据计算平均值

该文章描述了一个Python程序,用于处理report目录下的log文件,提取第3列的displayquality数据,计算平均值。程序先统计文件长度,以最短文件长度为基准进行截断,确保所有文件itemnum一致,支持同时处理多个文件并处理可能的错误。
摘要由CSDN通过智能技术生成

1.要求

程序 运行时,在控制台里 输入 report 里收集的 log文件,如 1_student_0.txt。程序会把文件里的第3列数据 display quality 提取出来,并计算对应的平均值.
计算平均值前,要统计并比较这些文件的长度,以最短文件的长度为基准,进行截断处理。这样保证了文件里的 item num 一致。
note:支持输入多个文件同时处理

系统运行时log里记录的文件
在这里插入图片描述
各个文件里数据内容
在这里插入图片描述

2.实现


import os
import matplotlib.pyplot as plt

"""
@brief: 运行时,在控制台里 输入 report 里收集的 log文件,如 xx.txt。程序会把文件里的第3列数据 display quality 提取出来,并计算对应的平均值.
计算平均值前,要统计并比较这些文件的长度,以最短文件的长度为基准,进行截断处理。这样保证了文件里的item num 一致。
@note:支持输入多个文件同时处理
"""


# 获取当前脚本所在的目录路径
current_directory = os.path.dirname(os.path.abspath(__file__))
# 切换到当前目录
os.chdir(current_directory)

def read_cal_count(filename):
    quality = []
    with open(filename, 'r') as file_data:
        for row in file_data:
            tmp_list = row.strip("\n").split(',')  # 去除首尾换行符,按‘,'切分每行的数据
            quality.append(tmp_list[2]) # display quality

    # 使用列表推导式筛选大于等于0的数值,保存到新列表
    filtered_list = []
    filtered_list = [int(num) for num in quality if int(num) > 0]

    print(sum(filtered_list),len(filtered_list))
    return filtered_list

def main():
    filelist = input("请输入txt文件的完整路径,用逗号分隔:").split(',')
    result = []
    min_len = float('inf') # inf是正无穷大的表示
    for file in filelist:
        file = file.strip() #用于删除字符串两端的所有空白字符(包括空格、换行符、制表符等)。
        try:
            list_temp = read_cal_count(file)
            length = len(list_temp)
            result.append((file, list_temp,length))
            if length < min_len:
                min_len = length
        except Exception as e:
            print(f"读取{file}时出错: {e}")

    print(f"最小长度是:{min_len}")
    # 按照行数从小到大排序
    result.sort(key=lambda x: x[2])
    # 对每个list_temp进行切片,只保留最小长度的部分
    for file, list_temp, length in result:
        list_temp = list_temp[:min_len]
        mean = sum(list_temp) / len(list_temp)
        print(f"{file} 的quality平均值为:{mean:.2f},和是:{sum(list_temp)},长度是:{len(list_temp)}")

if __name__ == "__main__":
    main()

3.结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值