1. 项目背景与需求分析作为一名经常需要处理学生考试成绩的教师或教学管理人员我们经常会遇到这样的需求从大量HTML格式的试卷文件中快速统计哪些题目学生没有得满分。传统的手工统计方式不仅耗时耗力而且容易出错。这正是我开发这个Python脚本的初衷。这个脚本的核心功能是批量读取指定目录下的HTML试卷文件自动提取每份试卷中未得满分的题目信息将统计结果整理成结构化的CSV文件包含用户名(考号)和对应的未满分题目详情提示这个方案特别适合需要分析学生薄弱环节的教学场景可以帮助教师快速定位班级整体或个别学生的知识盲区。2. 技术方案设计2.1 整体架构设计脚本采用经典的输入-处理-输出架构输入层从./data目录读取HTML文件处理层解析HTML内容提取题目和评分信息筛选未满分题目输出层将结果写入CSV文件2.2 关键技术选择选择Python作为开发语言主要基于以下考虑丰富的文本处理库(re, os)强大的HTML解析能力(正则表达式)便捷的CSV文件操作(csv模块)跨平台兼容性正则表达式虽然不如BeautifulSoup等专业HTML解析库强大但在处理结构相对固定的试卷HTML时性能和简洁性更有优势。3. 核心代码解析3.1 文件处理模块import os import re import csv file_path ./data file_names os.listdir(file_path)这段代码完成了导入必要的Python库设置数据目录路径获取目录下所有文件名列表注意确保data目录存在且包含HTML文件否则脚本会无输出。3.2 CSV文件初始化f open(文件名3.csv, w, newline, encodingutf-8) csv_writer csv.writer(f) csv_writer.writerow([用户名, 未满分题目解析])这里创建了CSV文件并设置了UTF-8编码(支持中文)无额外空行(newline)包含表头行3.3 HTML解析函数def extract_tigan_and_scores(html_content): results [] tihao_pattern rp id(第\d题)b([^])/b/p tihao_matches list(re.finditer(tihao_pattern, html_content)) score_pattern rdiv(\d\.\s*[^]\((\d)\)\s*---\s*(\d))/div score_matches list(re.finditer(score_pattern, html_content)) for score_match in score_matches: score_start score_match.start() score_text score_match.group(1) full_score int(score_match.group(2)) actual_score int(score_match.group(3)) corresponding_tihao 未知题目 for tihao_match in reversed(tihao_matches): if tihao_match.end() score_start: corresponding_tihao tihao_match.group(2).replace(nbsp;, ) break results.append({ tihao: corresponding_tihao, score_text: score_text, full_score: full_score, actual_score: actual_score }) return results这个核心函数完成了使用正则表达式匹配题号和题干匹配评分项及其分值建立题目和评分的对应关系返回结构化的题目信息列表3.4 主处理逻辑for file_name in file_names: if not file_name.endswith(.html): continue file_full_path os.path.join(file_path, file_name) username_match re.search(r\[(\d)\], file_name) if username_match: yonghuming username_match.group(1) else: yonghuming file_name[:6] with open(file_full_path, r, encodingutf-8) as f1: html_content f1.read() all_items extract_tigan_and_scores(html_content) not_full_items [] for item in all_items: if item[actual_score] item[full_score]: formatted f【{item[tihao]}】{item[score_text]} (满分{item[full_score]}实得{item[actual_score]}) not_full_items.append(formatted) if not_full_items: jiexi ; .join(not_full_items) else: jiexi 全部满分 csv_writer.writerow([yonghuming, jiexi])主循环处理每个HTML文件过滤非HTML文件从文件名提取用户ID读取文件内容解析并筛选未满分题目格式化输出到CSV4. 使用指南与最佳实践4.1 环境准备确保具备以下环境Python 3.6需要处理的HTML文件存放在./data目录下输出目录有写入权限4.2 文件命名规范为获得最佳效果建议HTML文件命名遵循以下格式[学号]_其他信息.html或学号其他信息.html例如[2023001]张三的试卷.html2023002李四的试卷.html4.3 HTML结构要求脚本依赖于特定的HTML标记结构p id第1题b题目内容/b/p ... div1. 评分项(5)---3/div如果HTML结构不同需要相应调整正则表达式。5. 常见问题与解决方案5.1 无法识别题目现象输出中大量出现未知题目原因HTML结构与正则表达式不匹配解决检查HTML中题目是否使用p id第\d题b.../b/p格式或修改代码中的tihao_pattern5.2 分数识别错误现象分数识别不正确原因评分项格式不符合预期解决确保评分项格式为div编号. 内容(满分)---得分/div或调整score_pattern正则表达式5.3 中文乱码现象CSV文件中出现乱码解决确保所有文件操作使用encodingutf-8用支持UTF-8的文本编辑器打开CSV文件6. 扩展与优化建议6.1 性能优化对于大量文件处理from multiprocessing import Pool def process_file(file_name): # 处理单个文件的逻辑 if __name__ __main__: with Pool() as p: p.map(process_file, file_names)6.2 结果分析扩展可以在脚本中添加统计分析功能各题目未满分人次统计班级整体薄弱环节分析学生个人错题统计6.3 可视化输出使用pandas和matplotlib生成直观的图表import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(文件名3.csv) # 进一步分析和可视化7. 实际应用案例我在上学期期末考试分析中使用了这个脚本处理了全年级300多份HTML试卷发现了几个有趣的现象第5题未满分比例高达65%说明这个知识点教学需要加强有15%的学生在第3题上意外失分经检查是题目表述存在歧义5名学生全部满分可以作为典型分析对象脚本将原本需要3天的手工统计工作缩短到5分钟完成大大提高了工作效率。
企业数字化 ERP 产品动态
相关推荐
长城宽带ip实战:3个技巧搞定新手避坑 长城宽带ip实战:3个技巧搞定新手避坑 报错堆满屏幕,StackTrace 像天书?别慌,新手避坑第一步是看懂 IP 归属。很多小白用长城宽带查 IP 时,发现接口返回的 Location… · 2026/9/24 6:44:05
竞星备考速查手册:3步搞定水利项目架构,告别语法空转 竞星备考速查手册:3步搞定水利项目架构,告别语法空转 刚啃完规范书,面对真实的水利工程图纸还是发懵?这就是典型的“学会语法却不知怎么搭项目”。别慌,手里这份 竞星 相关的 速查手册… · 2026/9/21 23:42:23
2026最新类型是什么意思:Python/TS/Go三大语言实战对比 2026最新类型是什么意思:Python/TS/Go三大语言实战对比 配置环境就卡半天,改个字段名报错改到崩溃,是不是你现在的状态? 很多刚转岗到全栈或后端开发的同事,对着IDE的红色波浪线发呆,心里都在嘀咕: 类型是什么意思… · 2026/9/21 23:42:17
力扣集训day05 思路主要是结合归并排序的思路进行解答,大致就是1.先二分拆分(merge()),拆到拆无可拆,也就是左右边界重合为止,至于l>r这种情况,是用来判断空链表这种特殊情况的。2.然… · 2026/9/24 6:43:51
微信小程序 checkbox 和 radio 组件案例学习 ## 一、实验介绍本次案例学习微信小程序中 checkbox 复选框组件与 radio 单选框组件,实现对文本样式和字体大小的动态控制。复选框支持多选,可以同时设置文字加粗、倾斜、下划线;单选框只能选择一项,用来切换诗词的字体尺寸。本次… · 2026/9/24 6:43:45
74LS160级联与任意进制计数器:从硬件到Verilog的完整设计指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 6:43:21
网络工程师必备:10个高频排障命令详解与实战技巧 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 6:43:14
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44