目的:由全院成绩单导出单个班级的成绩单
并且计算总分、平均分、按照总分排名。

一、示例

  • 下图为全院成绩单中一个同学本学年所有成绩;

需要使用的列有:班级、学号、姓名、课程名称、成绩、学分

  • 下图为导出的班级成绩单

二、代码

第一次写,代码挺不简洁的,但是基本功能有的

import pandas as pd
import warnings
import openpyxl as op#student类
class student:def __init__(self, num):self.num = num #学号self.name = None #姓名self.course = [] #课程名称self.grade = [] #课程成绩self.credit = [] #课程学分# self.gpa = [] #课程绩点# def __str__(self):#     return "".join(str(item) for item in (#         self.num, self.name, self.course, self.grade, self.credit, self.gpa#     ))# 改变data的形式
def changeForm(stu, columns):list = []for i in range(len(stu)):dict = {}dict[columns[0]] = stu[i]["num"]dict[columns[1]] = stu[i]["name"]sum = 0.0for j in range(2,len(columns) - 2):temp = stu[i]['grade'][stu[i]['course'].index(columns[j])]if((temp == '作弊') or (temp == '缓考') or (temp == '缺考') or (temp == '不及格')):temp = 0elif(temp == '优秀'):temp = 95elif(temp == '良好'):temp = 85elif((temp == '合格') or (temp == '中')):temp = 75elif(temp == '及格'):temp = 65dict[columns[j]] = float(temp) #各科成绩sum = sum + float(temp)dict[columns[j + 1]] = sum #总分dict[columns[j + 2]] = round(sum / (len(columns) - 4),2) #平均值:round四舍五入保留两位有效数字list.append(dict)list.sort(key=lambda k: (k.get('总分', 0), k.get('学号', 1)), reverse=True) #排序:按照总分由大到小排序,若总分相同按学号由小到大排序return list#保存数据为excel表格
def op_toExcel(dataLists, fileName, columns):  # openpyxl库储存数据到excelwb = op.Workbook()  # 创建工作簿对象ws = wb['Sheet']  # 创建子表ws.append(columns)  # 添加表头for dataList in dataLists:d = tuple(dataList.values())ws.append(d)  # 每次写入一行wb.save(fileName)# 需要修改的位置
clas = 19070241
columns = ['学号', '姓名', 'Java高级程序设计', '计算机组成原理', '软件工程','数据库课程实验周','数据库原理及应用','传感器原理及应用(RFID)','数值分析','工程训练C', '操作系统', '总分', '平均分']# 一、导入全院总成绩单
with warnings.catch_warnings(record=True):warnings.simplefilter('ignore', ResourceWarning)df = pd.DataFrame(pd.read_excel(r"2021-2022-1学期全院成绩.xlsx", engine="openpyxl"))# 二、处理表格
df1 = df[["班级","学号","姓名","课程名称","成绩","学分","绩点"]]
data = df1[df1["班级"] == clas] # 得到指定班级的学生信息
numsList = list(dict.fromkeys(data["学号"].values.tolist()))temp = []
for num in numsList:stu = student(num)records = data[data["学号"] == num]stu.name = list(dict.fromkeys(records["姓名"].values.tolist()))[0]for record in records:stu.course = records["课程名称"].values.tolist()stu.grade = records["成绩"].values.tolist()stu.credit = records["学分"].values.tolist()temp.append(stu.__dict__)dataLists = changeForm(temp, columns)# 三、保存表格数据
fileName = str(clas) + '.xlsx' #表名
op_toExcel(dataLists, fileName, columns)

用python导出班级成绩单相关推荐

  1. Python导出Excel图表

    Python自动化办公的过程,部分涉及到导出Excel图表:本篇主要讲下使用python代码将excel中的图表导出为图片的开发过程: Python  版本: C:\Users>python P ...

  2. 用python导出pptx中每一页的标题

    problem PPT每一页的标题 solution 大纲视图好像也行? python导出(需要先pip3 install python-pptx一下,以及更新pip3版本和安装lxml包) from ...

  3. [转载] Python导出Excel图表

    参考链接: Python | 使用openpyxl模块在Excel工作表中绘制图表 1 Python自动化办公的过程,部分涉及到导出Excel图表:本篇主要讲下使用python代码将excel中的图表 ...

  4. Python 导出EXCEL

    Python 导出Excel exportExcel.py #! /usr/bin/python #! -*- coding: utf-8 -*-__auther__ = 'xiaoshenge'im ...

  5. Python导出当前环境依赖包及项目依赖包

    Python导出当前环境依赖包信息: 命令行输入: pip freeze > ./requirements.txt 则会在当前命令行目录下生成一个requirements.txt文件,内容为当前 ...

  6. Python 导出手机通讯录文件 VCF 文件中的手机号码

    文章目录 Python 导出手机通讯录文件 VCF 文件中的手机号码 1.代码 Python 导出手机通讯录文件 VCF 文件中的手机号码 1.代码 if __name__ == '__main__' ...

  7. 结构体数组]用结构数组建立一张班级成绩单,包括每个学生的学号、姓名、成绩(C语言)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例2:结构体数组] 用结构数组建立一张班级成绩单,包括每个学生的学号.姓名.成绩.用函数编程实现下列功能: 1. 输入 ...

  8. 用NPOI、C#操作Excel表格生成班级成绩单

    在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...

  9. C 用单向链表建立一张班级成绩单,包括每个学生的学号、姓名、英语、高等数学、普通物理、C语言程序设计4门课程的成绩。实现以下功能,并提供菜单选项:(只实现了部分功能)

    用单向链表建立一张班级成绩单,包括每个学生的学号.姓名.英语.高等数学.普通物理.C语言程序设计4门课程的成绩.实现以下功能,并提供菜单选项: 0.退出 1.输入每个学生的各项信息 2.输出每个学生的 ...

最新文章

  1. 六轴机器人 宝元系统_庆云大国重器上线六轴智能焊接机器人,锻造高质量发展硬核...
  2. s()++php,jquery siblings()函数正确用法
  3. python四种可变类型_SICP Python 描述 2.4 可变数据
  4. [c/c++] programming之路(7)、数据类型转换、偷钱小程序、进制转换
  5. [转]树结构表递归查询在ORACLE和MSSQL中的实现方法
  6. springboot的yml自定义值的笔记
  7. 数据丢失引起宕机怎么办?
  8. java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较(转)
  9. 【Spring】Spring autowire-candidate解决注入的时候有多个符合的bena
  10. jQuery Tips(5)----关于伪类选择符
  11. 阿里双十一 5 大招式!
  12. 提高C#编程水平的50个要诀
  13. Backtrader(二十三)- 多股票回测
  14. Hexo博客搭建以及主题使用
  15. matlab中plot函数的常用颜色和线型
  16. RocketMQ实战2
  17. 奥维互动地图加载地球引擎Google Earth Engine(GEE)1984-2022 地球卫星资源 亲测有效,路亚 钓鱼 露营 水下结构 水文 温湿度 地貌变化 大数据AI分析 神器
  18. 十年项目经理总结的项目质量管理十要点
  19. Libgdx播放Spine动画(2)-功能
  20. 开源CMS框架整理收集

热门文章

  1. r9s可不可以升级到Android7,oppoR9s更新了假的安卓7.1
  2. ID4报错 The cookie ‘.AspNetCore.Correlation has set ‘SameSite=None‘ and must also set ‘Secure‘
  3. LED 数码管共阴共阳的区别+静态/动态显示
  4. spec文件写作规范
  5. 微信二维码支付支付宝二维码支付(主扫模式)开发指南
  6. 华为手提电脑和华为手机多屏协同一直显示恢复的解决方法
  7. iReport中纸张的大小 换算
  8. html怎样将四个li平均横放,css html 4图横向排列 自适应宽度,多图横向排列 li横向 li自适应...
  9. postgresql autovaccum自动清理
  10. 超级计算机预测南方下雪,大范围雨雪要来,南方确定再下雪!权威预报:14省有雪最大暴雪...