用python导出班级成绩单

用python导出班级成绩单,第1张

用python导出班级成绩单

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

一、示例

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

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

下图为导出的班级成绩单
二、代码

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

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.0
        for 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 = 0
            elif(temp == '优秀'):
                temp = 95
            elif(temp == '良好'):
                temp = 85
            elif((temp == '合格') or (temp == '中')):
                temp = 75
            elif(temp == '及格'):
                temp = 65
            dict[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库储存数据到excel
    wb = 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)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存