
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分钟完成大大提高了工作效率。