You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从固定格式文本文件指定行分别计算两组数值的平均值

固定格式文本数值提取与平均值计算方案

核心思路说明

你提到的「将数据存入列表后计算」是完全可行的,也是普通场景下最推荐的方案,逻辑直观方便校验。如果处理的是GB级超大文件,也可以用边读边累加的方案节省内存,以下是两种具体实现方法:


方案1:标记位匹配法(推荐90%以上场景使用)

不需要预设文本块结构,容错性高,即使中间出现多余随机行也不会出错:

  • 逐行读取文本,匹配到数值行后用标记位判断当前属于num1组还是num2组,交替存入两个列表
  • 全部提取完成后直接计算列表的总和除以长度得到平均值

Python示例代码:

nums1 = []
nums2 = []
# 标记位:0表示下一个数值归num1组,1表示归num2组
num_flag = 0

with open("你的文件路径.txt", "r", encoding="utf-8") as f:
    for line in f:
        cleaned_line = line.strip()
        # 此处匹配规则根据你的实际数值行格式调整,示例为数值行固定以"num "开头
        if cleaned_line.startswith("num "):
            current_val = int(cleaned_line.split()[1])
            if num_flag == 0:
                nums1.append(current_val)
                num_flag = 1
            else:
                nums2.append(current_val)
                num_flag = 0

# 计算平均值,增加空判断避免除以0报错
avg_num1 = sum(nums1) / len(nums1) if nums1 else 0
avg_num2 = sum(nums2) / len(nums2) if nums2 else 0

print(f"num1组平均值:{avg_num1:.2f}")
print(f"num2组平均值:{avg_num2:.2f}")

如果你的数值行没有前缀、就是纯数字行,把匹配规则改成if cleaned_line.isdigit(),提取数值直接用int(cleaned_line)即可。


方案2:固定块读取法(适合超大文件场景)

如果你的文本格式100%固定,每5行是一个循环块、块内第2行是num1、第3行是num2,可以用边读边累加的方案,不需要存储所有数值,节省内存:

sum1 = count1 = sum2 = count2 = 0
# 每个循环块的固定行数
BLOCK_SIZE = 5

with open("你的文件路径.txt", "r", encoding="utf-8") as f:
    while True:
        # 一次读取一个块的行
        block = [f.readline() for _ in range(BLOCK_SIZE)]
        # 读取到文件末尾就退出
        if not any(block):
            break
        # 提取num1
        val1 = int(block[1].strip().split()[1])
        sum1 += val1
        count1 += 1
        # 提取num2
        val2 = int(block[2].strip().split()[1])
        sum2 += val2
        count2 += 1

avg_num1 = sum1 / count1 if count1 else 0
avg_num2 = sum2 / count2 if count2 else 0

内容的提问来源于stack exchange,提问作者GrimOutlook77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:54:03