ADD file via upload

master
hnu202210040318 2 years ago
parent b7677d9809
commit 291fbcc4d4

@ -0,0 +1,101 @@
# 使用import导入os模块
import os , docx , openpyxl
# 第一大题选择题标准答案
standardOne = ['B', 'B', 'B', 'C', 'D', 'A', 'D', 'D', 'B', 'A']
# 第二大题填空题标准答案
standardTwo = ["东临碣石", "行舟绿水前", "孤山寺北贾亭西", "断肠人在天涯", "故人具鸡黍", "一曲新词酒一杯", "何当共剪西窗烛", "误入藕花深处", "烟笼寒水月笼沙", "万籁此都寂", "初日照高林", "腾蛇乘雾"]
# 将答题卡文件夹路径赋值给变量allKeyPath
allKeyPath = input("请输入答题卡文件夹路径:")
# 使用os.listdir()函数获取该路径下所有的文件并赋值给变量allItems
allItems = os.listdir(allKeyPath)
# 定义一个空列表allStudentsData存储所有学生数据
allStudentsData = []
# 使用for循环逐个遍历所有学生答题卡
for item in allItems:
# 定义一个空字典studentData存储单个学生数据
studentData = {}
# 使用os.path.splitext()函数获取文件名的前半段并赋值给变量fileName
fileName = os.path.splitext(item)[0]
# 使用split()函数以"-"分隔文件名将第1部分班级信息赋值到学生数据字典的classInfo键里
studentData["classInfo"] = fileName.split("-")[0]
# 使用split()函数以"-"分隔文件名将第2部分姓名信息赋值到学生数据字典的name键里
studentData["name"] = fileName.split("-")[1]
# 使用os.path.join()函数拼接出答题卡路径并赋值给变量keyPath
keyPath = os.path.join(allKeyPath, item)
# 读取答题卡并赋值给变量doc
doc = docx.Document(keyPath)
# 读取第四段学号段并赋值给变量idPara
idPara = doc.paragraphs[3]
# 读取学号段中第二个样式块并赋值给变量idRun
idRun = idPara.runs[1]
# 读取学号并赋值到学生数据字典的id键里
studentData["id"] = idRun.text
# 初始化学生数据字典里scoreTwo字段为0分作为填空题分数
studentData["scoreTwo"] = 0
# 使用for循环和enumerate()函数
# 遍历储存标准答案的列表standardTwo的同时
# 生成一个从8开始的idx
for idx,value in enumerate(standardTwo, 8):
# 获取学生答案并赋值给变量studentAnswerTwo
studentAnswerTwo = doc.paragraphs[idx].runs[1].text
# 判断当学生答案与标准答案相等时
if studentAnswerTwo == value:
# 当学生答案与标准答案一样时学生的填空题分数加5分
studentData["scoreTwo"] = studentData["scoreTwo"] + 5
# 读取答题卡中的表格并赋值给变量table
table = doc.tables[0]
# 读取表格中的第二行并赋值给变量secRow
secRow = table.rows[1]
# 读取第二行中的所有单元格并赋值给变量secCell
secCell = secRow.cells
# 初始化学生数据字典里scoreOne字段为0分作为选择题分数
studentData["scoreOne"] = 0
# 使用for循环和enumerate()函数
# 遍历储存标准答案的列表standardOne的同时
# 生成一个从0开始的idx
for idx,value in enumerate(standardOne):
# 获取学生选择题答案并赋值给变量studentAnswerOne
studentAnswerOne = secCell[idx].text
# 判断当学生答案与标准答案相等时
if studentAnswerOne == value:
# 当学生答案与标准答案一样时学生的选择题分数加5分
studentData["scoreOne"] = studentData["scoreOne"] + 5
# 使用append()函数将studentData添加到总学生数据allStudentsData中
allStudentsData.append(studentData)
# 创建一个新工作簿并赋值给变量newWb
newWb = openpyxl.Workbook()
# 将名为Sheet的默认工作表赋值给变量sheet
sheet = newWb["Sheet"]
# 将sheet工作表名称修改为"成绩表"
sheet.title = "成绩表"
# 给工作表设置表头
sheet["A1"].value = "学生姓名"
sheet["B1"].value = "学生班级"
sheet["C1"].value = "学生学号"
sheet["D1"].value = "选择题分数"
sheet["E1"].value = "填空题分数"
# 使用for循环和enumerate()函数
# 遍历所有学生数据allStudentsData的同时
# 生成一个从2开始的index
for index, studentData in enumerate(allStudentsData,2):
# 将第A列数据设置为学生姓名studentData["name"]
sheet[f"A{index}"].value = studentData["name"]
# 设置学生班级
sheet[f"B{index}"].value = studentData["classInfo"]
# 设置学生学号
sheet[f"C{index}"].value = studentData["id"]
# 设置选择题分数
sheet[f"D{index}"].value = studentData["scoreOne"]
# 设置填空题分数
sheet[f"E{index}"].value = studentData["scoreTwo"]
# 使用save()函数将工作簿保存到 /Users/qiao/answerKey/成绩汇总.xlsx 路径下
newWb.save(f"{allKeyPath}/成绩汇总.xlsx")
Loading…
Cancel
Save