当前位置: 首页 > news >正文

Python中CSV文件处理的常见累积错误及修正方案

在使用 Python 的 csv 模块处理学生成绩数据时,一个极易被忽视却影响结果准确性的典型问题是变量作用域与重用逻辑错误。如原始代码所示,grades = [] 被定义在 for row in reader: 循环外部,导致每次迭代都将新学生的成绩追加到同一个列表中——而非为每位学生独立初始化。结果是:第二位学生的平均分 =(第一位所有成绩 + 第二位所有成绩)的均值,第三位则继续累加……最终输出的“每人平均分”实为不断膨胀的全局累计均值,完全偏离业务本意。

正确做法是确保每个学生对应独立的数据上下文。以下为优化后的完整实现:

复制AI写代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import csv

from statistics import mean

def calculate_averages(input_file_name, output_file_name):

results = []

with open(input_file_name, newline='')asinfile:

reader = csv.reader(infile)

forrow in reader:

ifnot row: # 跳过空行,增强鲁棒性

continue

name = row[0].strip() # 去除姓名首尾空格

try:

grades = [float(score.strip())forscore in row[1:]ifscore.strip()]

ifnot grades:

raise ValueError(f"无有效成绩数据: {row}")

avg_score = mean(grades)

results.append([name, f"{avg_score:.1f}"]) # 保留一位小数,格式统一

except (ValueError, TypeError)ase:

print(f"警告:跳过异常行 '{row}' — {e}")

continue# 容错处理,不中断整个流程

with open(output_file_name,'w', newline='')asoutfile:

writer = csv.writer(outfile)

writer.writerows(results)

关键改进说明:

  • 作用域修正:grades 现定义于循环体内,确保每次迭代均为新列表;
  • 类型安全:显式使用 float() 转换并捕获 ValueError,避免字符串(如 "N/A" 或空字段)引发崩溃;
  • 空值防御:通过 if score.strip() 过滤空白成绩项,if not row 跳过空行;
  • 可读性提升:变量命名语义化(infile/outfile、results)、移除冗余 OrderedDict(普通二维列表更轻量且 CSV 本身无序需求);
  • 输出规范:f"{avg_score:.1f}" 统一保留一位小数,兼顾精度与可读性;
  • 错误处理策略:采用非阻断式警告(print + continue),保障批量处理稳定性。

⚠️注意事项:

  • 若输入 CSV 含表头(如 "Name,Math,English,Science"),需在 for row in reader: 前添加 next(reader) 跳过首行;
  • 对于超大文件,建议使用生成器或 pandas 配合 chunksize 提升内存效率;
  • 生产环境应补充日志记录(如 logging 模块)替代 print,便于追踪异常;
  • 若成绩字段含单位(如 "85%"),需先正则清洗再转换。

该方案不仅修复了核心逻辑缺陷,更以工程化思维强化了健壮性、可维护性与可扩展性,是处理类似逐行聚合类 CSV 任务的推荐范式。

http://www.jsqmd.com/news/569526/

相关文章:

  • Python合并多个Excel文件的方法实现与对比
  • 第十二章:数据质检(QC)步骤详解
  • 那张看不见的蜘蛛网:马尔可夫随机场到底在捕捉什么?(上篇)
  • PyTorch 2.8镜像效果展示:FlashAttention-2加速下大模型推理速度提升300%
  • Phi-4-mini-reasoning生产环境:vLLM服务稳定性与Chainlit前端容错设计
  • MetaTube插件:智能元数据整合引擎的技术架构深度解析
  • 《金融时报》2026 FT 法国商学院排名(全法前十)
  • Graphormer镜像免配置实践:预编译CUDA算子+静态链接避免运行时依赖冲突
  • 第十七章:Skill 文件与 AI 集成
  • Wan2.2-I2V-A14B后端服务开发:Node.js构建高性能视频生成API网关
  • Bug占卜师:用系统崩溃预测未来
  • 服饰解构AI新标杆:Nano-Banana软萌拆拆屋在服装博物馆数字化中的应用
  • 2026防脱精华液哪家好?科学测评帮你选对产品 - 品牌排行榜
  • AI工作猎手:10倍提升求职效率的终极AI自动化简历投递工具
  • 【JAVA基础面经】深拷贝与浅拷贝
  • 基于Gradio的实时口罩检测系统搭建:从镜像部署到界面操作的完整教程
  • SUNFLOWER MATCH LAB跨平台开发:Java与Python混合编程实战
  • Phi-4-mini-reasoning效果展示:逻辑题‘如果A则B,非B,所以?’的准确归因
  • springboot+vue基于web的高校学生成绩管理系统设计系统
  • 2026年,探秘云南钢筋网片专业工厂
  • 【AI模型】社区-ModelScope
  • 2026防脱精华液哪家靠谱?成分与效果实测对比指南 - 品牌排行榜
  • NVIDIA Profile Inspector 终极指南:免费解锁显卡隐藏性能的完整教程
  • 万物识别镜像高级功能探索:除了基础识别,还能做什么?
  • 【机械视觉】Halcon实战:Hough变换在工业检测中的高效应用与参数调优
  • Nanbeige 4.1-3B像素前端快速上手:3步搭建复古JRPG风格AI聊天室
  • Wan2.2-I2V-A14B企业级部署案例:单卡24GB显存实现高并发视频API服务
  • FaceAware在社交应用中的实际应用:提升用户头像体验的7个场景
  • Anything to RealCharacters效果评测:与Stable Diffusion ControlNet写实方案对比
  • 2026年推荐一款好用的护发精油,秀发柔顺有光泽 - 品牌排行榜