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
相关产品推荐
相关产品推荐

