如何不使用pandas读取CSV的姓名成绩并将平均分写入新CSV文件
问题解决方法
完全可以只用Python标准库的csv模块完成需求,你现有代码的问题主要出在迭代器使用、数据暂存、csv写入方法这几个地方,以下是修正后的可运行代码:
import csv from statistics import mean # 自行替换为你的输入输出文件实际路径 input_file_name = "grades.csv" output_file_name = "average_grades.csv" # 提前声明列表存储所有计算好的结果 result_list = [] with open(input_file_name, encoding='utf-8') as f: reader = csv.reader(f) for row in reader: # 跳过可能存在的空行 if not row: continue name = row[0] # 批量将成绩转为整数 grades = list(map(int, row[1:])) # 计算当前学生的平均分 avg = mean(grades) result_list.append([name, avg]) # 批量写入结果到新CSV文件 with open(output_file_name, 'w', newline='', encoding='utf-8') as new_f: writer = csv.writer(new_f) writer.writerows(result_list)
原有代码的问题说明
- 导入了多余的
from os import name,会覆盖你自定义的姓名字段,直接删除即可 csv.reader是一次性迭代器,第一次遍历读取所有行之后就为空了,不能重复遍历,所以需要提前把计算好的结果存到列表里,再统一写入csv.writer的writerow方法接收的是列表类型的参数,不需要手动拼接逗号字符串,直接传[姓名, 平均分]即可- 原有平均分计算逻辑放在了成绩遍历循环内部,不需要重复计算,等所有成绩转成整数后计算一次即可
内容的提问来源于stack exchange,提问作者Marzieh-Rhm77
相关产品推荐
相关产品推荐

