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

一、原始数据

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

学号 姓名 语文 数学 英语 物理 化学 思品 历史 地理 生物
20230101 朱婴 94 117 116 58 36.5 28 33 27 22
20230102 赵朔 89 114 111 58 34.5 34 28 26 28
20230103 赵胜 91 113 111 59 36 37 28 24 20
20230104 赵嘉 98 101 113 47 31.5 32 34 26 26
20230105 赵成 100 105 110 56 35 20 35 22 23
20230106 展喜 90 109 113 58 32 21 30 26 23
20230107 袁克 86 110 108 53 36.5 29 29 26 23
20230108 杨朱 89 110 109 57 28 31 27 26 21
20230109 阎嘉 79 115 100 56 37.5 31 26 24 24
20230110 胥婴 88 95 112 59 34.5 26 23 25 26
20230111 向宁 82 109 84 57 33 27 29 28 27
20230112 伍举 83 108 101 47 35.5 23 21 25 26
20230113 王子胜 87 94 103 54 28 30 27 27 19
20230114 田盈 78 98 99 34 28 23 27 18 15
20230115 孙嘉 85 89 78 42 30.5 28 24 21 16
20230116 沈子嘉 82 93 74 39 29.5 26 16 26 22
20230117 沈尹寿 66 101 86 42 23.5 22 24 15 18
20230118 祁胜 80 72 97 32 16.5 26 26 22 14
20230119 栾盈 75 73 78 37 27.5 22 29 23 18
20230120 栾宁 76 81 93 33 17 21 22 19 13
20230121 李克 76 78 78 25 20 17 31 19 15
20230122 乐婴齐 76 78 70 37 29 21 26 8 13
20230123 乐大心 76 72 63 28 13.5 23 29 21 17
20230124 乐成 76 73 60 19 26.5 22 23 24 16
20230125 孔宁 77.5 67 69 14 14.5 18 27 22 18
20230126 贾举 70 66 57 21 20.5 14 26 15 11
20230127 韩虎 76 68 45 24 11 15 14 17 17
20230128 巩成 65 64 57 20 20.5 10 20 14 9
20230129 高克 75 42 54 20 12.5 21 14 8 9
20230130 高虎 67 43 39 24 21 26 17 9 9
20230131 范鞅 8 24 57 18 16.5 7 15 13 6
20230132 崔成 44 10 23 13 7 11 11 5 3

二、实现目标:

调用第三方库 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 += 1if 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')

分享完毕!欢迎交流!

将学生各科成绩表汇总生成学生总成绩表的Python必考题相关推荐

  1. MySql 学生表 科目表 成绩表 查询学生各科成绩

    MySql 学生表 科目表 成绩表 查询学生各科成绩 2016年08月16日 01:05:02 lzxomg 阅读数 8155 版权声明:本文注明出处可以转载. https://blog.csdn.n ...

  2. mysql查询所有学生各科成绩按照总成绩降序排列

    学生表student 班级表class 课程表subject 成绩表score 查询所有学生各科成绩按照总成绩降序排列. 1.获取单门课程的学生成绩 select sc.stu_id,sc.score ...

  3. 已知某个班有 30 个学生,学习 5 门课程,已知所有学生的各科成绩。计算每个学生的平均成绩,并输出

    已知某个班有 30 个学生,学习 5 门课程,已知所有学生的各科成绩.计算每个学生的平均成绩,并输出 注意: 定义一个二维数组 A,用于存放 30 个学生的 5 门成绩. 定义一个一维数组 B,用 于 ...

  4. mysql按组区分后获取每组前几名的sql写法(以及学生各科成绩大于多少分的总结)

    遇到一个场景,要把数据分组,然后获取每组前10条数据,首先我想到用group by分组,但是难点是分组后怎么知道该数据在组里面排第几条.研究了一下,写个demo,记录一下笔记,文章后面顺便也记录一下常 ...

  5. C语言 计算学生各科成绩平均分的总和

    n个学生的信息(包括学生的姓名.语数英三门的成绩.住址)存储在一个结构体数组stuinfo中,现需设计一个函数,统计学生各科成绩平均分的总和,并通过函数返回. #include <stdio.h ...

  6. java计算并显示学生的成绩_Java开学测试-学生成绩管理系统

    题目: 1.定义 ScoreInformation 类,其中包括七个私有变量(stunumber, name, mathematicsscore, englishiscore,networkscore ...

  7. 【C#Windows 窗体应用】实现简单学生查询成绩,管理员管理学生成绩

    [C#Windows 窗体应用]实现简单学生查询成绩,管理员管理学生成绩功能 已经上传到 https://gitee.com/biflcy/student-management-system 给颗小心 ...

  8. oracle横向合并两张表,SQL中将两个表合并成一个新表 SQL如何合并两个表并生成一个新表?...

    sql把两个表合并成一个新表的语句应该怎么写SQL SERVER: select * into 表3 from ( select 字段列表1 from 表1 union all select 字段列表 ...

  9. c#语言编程:定义person类,再派生学生类如何存放学生的成绩,C#定义全班学生成绩类,包括姓名,学号,C++成绩,英语成绩,数学成绩,平均成绩...

    满意答案 兄弟咱写了1个小时,格式规范,且经过严密测试,完成你所需要功能,且还有人性化设计,并且为你提供了可视化测试,我为你考虑的周到吧,不懂就问我 努力吧~~~ usingSystem; using ...

最新文章

  1. B00009 C语言分割字符串库函数strtok
  2. IoC~MVC3+EF+Autofac实现松耦合的系统架构 [转载]
  3. POJ 1321 棋盘问题 搜索
  4. 函数初识(文字总结)
  5. php验证中文姓名,我想在表单验证中加入中文姓名合法性模糊匹配判断?
  6. 设计模式之职责链模式
  7. ORACLE常用数值函数、转换函数、字符串函数介绍
  8. yum install php72w,yum 安装 php72w-pecl-imagick 报错
  9. 四种软件开发模式(瀑布、迭代、螺旋、敏捷),对比分析
  10. VS2013/SQL SERVER 产品密钥
  11. 网络协议安全性分析(思维导图word版本)
  12. 阿里开源互动游戏引擎Eva.js
  13. VR全景图之图片拼接教程
  14. 物联网应用技术和计算机应用技术哪个更好,2020物联网应用技术专业选什么大学好?...
  15. Android状态栏禁止下拉异常分析
  16. Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) E. Vasya and Good Sequen
  17. 【基因调控网络】Gene regulatory networks modelling using a dynamic evolutionary hybrid(ENFRN ,动态进化混合模型2010)
  18. 盈利“晴空”下,唯品会拨不开的“乌云”
  19. 当原图片加载失败时,如何让图片加载上我们默认给的图片
  20. python反爬虫应对之借助平台超级鹰突破网页验证码识别

热门文章

  1. python就业前景如何_Python就业前景薪资分析
  2. 修改mysql 8.0密码
  3. PHP游戏人物解锁,雨中冒险2全人物解锁代码 教你怎么解锁全人物皮肤
  4. IDEA上配置mysql
  5. 大小写字母的转换——C语言
  6. word中表格文字不自动换行的方式
  7. 骁龙855到底有多贵?小米高管:骁龙845的一倍多,710的三倍
  8. TL-WAR1200L,TP-LINK企业级路由器远程开机设置,手机开启windows电脑操作方法
  9. 修改Linux命令行字体颜色(亲测有效)
  10. php 抖音openApi 获取粉丝权限