获取了标准答案和学生答案后,就可以计算每位同学的填空题分数啦。 |
# 使用import导入os模块 import os # 使用import导入docx import docx # 第二大题填空题标准答案 standardTwo = ["东临碣石", "行舟绿水前", "孤山寺北贾亭西", "断肠人在天涯", "故人具鸡黍", "一曲新词酒一杯", "何当共剪西窗烛", "误入藕花深处", "烟笼寒水月笼沙", "万籁此都寂", "初日照高林", "腾蛇乘雾"] # 将乔老师的答题卡文件夹路径 /Users/qiao/answerKey 赋值给变量allKeyPath allKeyPath = "/Users/qiao/answerKey" # 使用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
# 使用append()函数 # 将studentData添加到总学生数据allStudentsData中 allStudentsData.append(studentData) |
完善代码
现在只需使用if语句将学生答案studentAnswerTwo和标准答案value进行比较。 |
# 使用import导入os模块 import os # 使用import导入docx import docx # 第二大题填空题标准答案 standardTwo = ["东临碣石", "行舟绿水前", "孤山寺北贾亭西", "断肠人在天涯", "故人具鸡黍", "一曲新词酒一杯", "何当共剪西窗烛", "误入藕花深处", "烟笼寒水月笼沙", "万籁此都寂", "初日照高林", "腾蛇乘雾"] # 将乔老师的答题卡文件夹路径 /Users/qiao/answerKey 赋值给变量allKeyPath allKeyPath = "/Users/qiao/answerKey" # 使用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
# 使用append()函数 # 将studentData添加到总学生数据allStudentsData中 allStudentsData.append(studentData)
# 使用print输出变量allStudentsData print(allStudentsData) |
今天,我们帮助乔老师获取了填空题的答题内容,并算出了对应的分数。明天,我们将继续学习如何读取答题卡中的选择题答案,并把所有的信息导入到Excel表格中~