参考例11.42,实现namedtuple对象应用程序,读取成绩文件scores.csv的内容(学员、ID、语文、数学、外语和信息),显示学员ID和平均成绩
时间: 2024-11-06 20:36:51 浏览: 14
首先,我们需要导入`csv`模块来处理CSV文件,并导入`collections`模块里的`namedtuple`,它是一个轻量级的元组子类,用于创建具有名称字段的简单记录。然后,我们按照例子的描述来编写程序:
```python
import csv
from collections import namedtuple
# 定义一个名为Score的(namedtuple),表示每条成绩数据
Score = namedtuple('Score', ['student_id', 'chinese', 'math', 'english', 'informatics'])
def read_scores(file_name):
with open(file_name, 'r') as file:
reader = csv.DictReader(file) # 使用DictReader将每一行转换为字典
scores_list = [Score(**row) for row in reader] # 将字典转换为Score对象列表
return scores_list
def calculate_average(scores):
total_avg = {name: sum(getattr(score, name) for score in scores) / len(scores)
for name in Score._fields}
return total_avg
file_name = 'scores.csv'
scores = read_scores(file_name)
# 计算并打印每个学生的平均成绩
for student_id, avg_scores in calculate_average(scores).items():
print(f"学员ID: {student_id}, 平均成绩: {' '.join([f'{field}: {avg}' for field, avg in avg_scores.items()])}")
阅读全文