Python实现文件成绩处理:计算均值、排序并写入新文件
CSV文件成绩处理与写入解决方案
问题说明
现有文件list1,内容格式为姓氏、名字、成绩1、成绩2,示例数据如下:
DUPOND, John, 12, 10 JAMES, Fil, 8, 10 KYLE, Gregor, 17, 7
需实现Python脚本完成以下操作:
- 将
list1内容排序后写入新文件list2 - 每行添加两门成绩的平均分
- 输出格式调整为名字、姓氏、成绩1、成绩2、平均分,正确示例输出如下:
Fil, JAMES, 8, 10, 9 Gregor, KYLE, 17, 7, 12 John, DUPOND, 12, 10, 11
用户提供的测试代码仅能以列表形式输出内容,缺少均值计算与文件写入逻辑,以下是修正后的完整方案。
完整代码实现
import sys import csv import statistics # 读取并处理输入数据 processed_data = [] with open(sys.argv[1], newline='') as input_file: # 跳过逗号后的空格,避免字段带多余空白字符 csv_reader = csv.reader(input_file, skipinitialspace=True) for row in csv_reader: # 拆分原始字段 surname, name, score1, score2 = row # 转换成绩为整数,确保均值计算准确 score1_int = int(score1) score2_int = int(score2) # 计算平均分 avg_score = statistics.mean([score1_int, score2_int]) # 按要求重组字段顺序 formatted_row = [name, surname, score1, score2, str(avg_score)] processed_data.append(formatted_row) # 对处理后的数据排序(默认按名字升序,可按需调整) processed_data.sort() # 写入输出文件list2 with open('list2', 'w', newline='') as output_file: csv_writer = csv.writer(output_file) csv_writer.writerows(processed_data)
关键细节说明
- 模块补充:导入
statistics模块用于均值计算,原代码遗漏此步骤 - CSV读取优化:
skipinitialspace=True参数自动忽略逗号后的空格,避免字段包含多余空白 - 数据转换:将成绩字符串转为整数,避免字符串类型导致的计算错误
- 格式调整:重新排列字段顺序为「名字、姓氏、成绩1、成绩2、平均分」
- 排序逻辑:默认按名字升序排序,若需按其他维度排序,可修改
sort()的key参数,例如按平均分降序:processed_data.sort(key=lambda x: float(x[4]), reverse=True) - 文件写入:使用
csv.writer批量写入处理后的所有行,保证输出格式符合CSV规范
原测试代码的问题
- 未导入
statistics模块,调用statistics.mean()会触发NameError - 未定义
xs变量,无有效数据传入均值计算函数 - 存在缩进错误,
statistics.mean(xs)的缩进层级不正确 - 缺少字段格式调整、排序及结果写入新文件的逻辑
内容的提问来源于stack exchange,提问作者yoyo348
相关产品推荐
相关产品推荐

