将学生各科成绩表汇总生成学生总成绩表的Python必考题

为了考核学员对 Python  Workbook 和 load_workbook 模块学习掌握情况,将学生各科成绩表汇总生成一个新的学生总成绩表几乎成了必练作业或必考题,本文介绍两种方法,供学习参考。

一、原始数据

学生各科成绩表数据结构如下,有兴趣的读者可以采取选取复制粘贴的方法自己生成一个【学生各科成绩表.xlsx】,用于学习实践: 

学号姓名语文数学英语物理化学思品历史地理生物
20230101朱婴941171165836.528332722
20230102赵朔891141115834.534282628
20230103赵胜91113111593637282420
20230104赵嘉981011134731.532342626
20230105赵成100105110563520352223
20230106展喜90109113583221302623
20230107袁克861101085336.529292623
20230108杨朱89110109572831272621
20230109阎嘉791151005637.531262424
20230110胥婴88951125934.526232526
20230111向宁8210984573327292827
20230112伍举831081014735.523212526
20230113王子胜8794103542830272719
20230114田盈789899342823271815
20230115孙嘉8589784230.528242116
20230116沈子嘉8293743929.526162622
20230117沈尹寿66101864223.522241518
20230118祁胜8072973216.526262214
20230119栾盈7573783727.522292318
20230120栾宁768193331721221913
20230121李克767878252017311915
20230122乐婴齐76787037292126813
20230123乐大心7672632813.523292117
20230124乐成7673601926.522232416
20230125孔宁77.567691414.518272218
20230126贾举7066572120.514261511
20230127韩虎766845241115141717
20230128巩成6564572020.51020149
20230129高克7542542012.5211489
20230130高虎6743392421261799
20230131范鞅824571816.5715136
20230132崔成441023137111153

二、实现目标:

调用第三方库 openpyxl 的 Workbook 和 load_workbook 模块,处理 excel 文件取出各科成绩数据,相加后将总成绩数据存入【学生总成绩表.xlsx】中,结构如下表:

姓名总分
531.5
522.5
赵胜519
508.5
506
展喜502
袁克500.5
498
492.5
488.5
向宁476
469.5
王子469
田盈420
413.5
沈子嘉407.5
沈尹寿397.5
385.5
栾盈382.5
栾宁375
李克359
乐婴齐358
大心342.5
339.5
孔宁327
贾举300.5
287
巩成279.5
高克255.5
高虎255
范鞅164.5
崔成127

三、程序代码:

方法一:

建立一个以姓名为键名、成绩合计为变量的学生分数合计字典,遍历添加到工作表。

#导入模块
from openpyxl import Workbook, load_workbook
#导入 excel 工作簿
wb = load_workbook('./学生各科成绩表.xlsx')
# 获取活动工作表
ws = wb.active

# 通过实例化 Workbook 类来获取工作簿对象,为创建【学生总成绩表】做准备
new_wb = Workbook()
# 获取活动工作表
new_ws = new_wb.active

# 计算每名学生的总分
data = {} # 初始化学生分数合计字典
# 获取活动工作表 ws 中除表头外的数据
for row in ws.iter_rows(min_row=2, values_only=True):
    name = row[1]          # 取出学生姓名
    total = 0              # 初始化总分计算变量
    classify = 0           # 初始化计算分类标识符
    for n in row:          # 遍历行数据
        classify += 1
        if classify >2:    # 从第3列开始为学生的各科成绩
            total += n     # 累加各科成绩
        elif classify == 2:# 如果是第2列数据
            name = n       # 取出学生姓名
    data[name] = total     # 将合计成绩赋值给对应学生姓名的键名

# 将表头写入工作表中
new_ws.append(['姓名','成绩'])
# 遍历学生分数合计字典,并将学生姓名和分数合计加入工作表中
for key in data:
    row_data =[]
    row_data.append(key)
    row_data.append(data[key])
    new_ws.append(row_data)

# 保存文件保存为【学生总成绩表.xlsx】
new_wb.save('./学生总成绩表.xlsx')

方法二:

用 sum() 函数直接对各科成绩求和,直接添加到工作表。

#导入模块
from openpyxl import Workbook, load_workbook
#导入 excel 工作簿
wb = load_workbook('./学生各科成绩表.xlsx')
# 获取活动工作表
ws = wb.active

# 通过实例化 Workbook 类来获取工作簿对象,为创建【学生总成绩表】做准备
new_wb = Workbook()
# 获取活动工作表
new_ws = new_wb.active
# 将表头写入工作表中
new_ws.append(['姓名','成绩'])

# 获取活动工作表 ws 中除表头和学号的数据
for row in ws.iter_rows(min_row=2, min_col=2, values_only=True):
    name = row[0]               # 获取学生姓名
    total = sum(row[1:])        # 合计各科成绩
    new_ws.append([name,total]) #将学生姓名和分数合计加入工作表中

# 保存文件保存为【学生总成绩表.xlsx】
new_wb.save('./学生总成绩表.xlsx')

分享完毕!欢迎交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值