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

Python计算txt文件销售单位平均值的错误修复及优化咨询

问题分析与解决方案

现有代码的错误原因

  • 硬编码索引不可靠:你通过row[22]提取数值,但每行的字符串长度不一定固定,空行或者表头行的该位置不是有效数字,直接转int就会抛出ValueError。
  • 文件关闭错误:循环里的tiedosto.close()变量名错误(你打开的文件是file),而且在循环内关闭文件会导致后续读行失败。
  • 数据类型错误:你的单位是浮点数(比如8.10),用int()转换会丢失精度,应该用float()。
  • 未跳过表头:第一行是表头"Time";"unit",没有数值,也会导致转换失败。

修复原有代码

修改后的代码解决了上述所有问题,同时用with语句自动管理文件,避免手动关闭的疏漏:

total = 0
count = 0

with open("data.txt", 'r', encoding="utf-8") as file:
    # 跳过表头行
    next(file)
    for row in file:
        # 去除首尾空白,跳过空行
        row = row.strip()
        if not row:
            continue
        # 按分号分割每行数据
        parts = row.split(";")
        # 提取单位值,去掉引号后转成浮点数
        unit = float(parts[1].strip('"'))
        total += unit
        count += 1

if count > 0:
    average = total / count
    print(f"销售单位平均值: {average:.2f}")
else:
    print("没有有效数据")

更简便的实现方法

方法1:使用Python内置csv模块

csv模块专门处理分隔符格式的文件,代码更规范且不易出错:

import csv

total = 0
count = 0

with open("data.txt", 'r', encoding="utf-8") as file:
    # 指定分隔符为分号,自动识别引号包裹的内容
    reader = csv.DictReader(file, delimiter=';')
    for row in reader:
        # 直接通过列名获取数值
        unit = float(row['unit'])
        total += unit
        count += 1

average = total / count if count else 0
print(f"销售单位平均值: {average:.2f}")

方法2:使用pandas(适合大数据量)

如果数据量较大,用pandas可以一行完成读取和计算,简洁高效:

import pandas as pd

# 读取文件并指定分隔符
df = pd.read_csv("data.txt", delimiter=';')
# 直接计算平均值
average = df['unit'].mean()
print(f"销售单位平均值: {average:.2f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:25:44