Python课程标准生成器(python-curriculum-standard)
> 依据官方《课程标准模板.docx》的内嵌样式(base64 存于 assets/template_docx.py,无二进制资源),一键生成符合高职/高校规范的课程标准文档。
> 以《Python编程基础》课程标准为完整范例,所有字体、边框、合并、学时规则均已工程化固化。
适用场景
- 需要按学校下发的《课程标准模板》批量/快速产出正式
.docx课标文档。 - 模板含特殊排版:仿宋/楷体/黑体混排、表格实线边框、纵向/横向合并单元格、首行缩进、岗课赛证对接表、量规附表。
- 需要把“手工填表”变成“参数化生成器”,便于后续课程复用与迭代。
何时使用
- 用户给出或引用一份《课程标准模板.docx》,并要求“按这个模板生成/改写某课程标准”。
- 用户已有生成脚本但遇到显示问题(字体变仿宋、表格虚线、缩进未归零、合并未体现、课时不一致)。
- 需要把现有成果打包成可分发、可复用的技能。
文件结构
python-curriculum-standard/
├── SKILL.md # 本文件:技能描述与使用说明
├── scripts/
│ └── generate_standard.py # 核心生成器(Python,依赖 python-docx)
├── assets/
│ └── template_docx.py # 官方模板 base64 内嵌副本(无二进制资源,SkillHub 友好)
└── references/
├── requirements.md # 需求说明(背景、目标、约束)
├── business-flow.md # 核心业务流程(端到端步骤)
├── troubleshooting.md # 问题排查与解决办法(已知坑与修复)
└── usage.md # 使用说明(安装依赖、运行、参数、自定义)
工作流程(端到端)
- 研读模板:从
assets/template_docx.py的内嵌 base64 解码出模板字节流,用 python-docx 读取,提取八章骨架、表格样式名(Normal Table / 网格型3 / 网格型4 / Table Grid)与真实字体(标题=方正小标宋_GBK、章节=黑体、二级标题=楷体_GB2312、正文=仿宋_GB2312、表格=楷体_GB2312)。注意中文渲染由w:eastAsia东亚字体决定,仅设font.name无效。 - 确认参数:课程名称/性质/开课单位/学期/教材/学时等,与用户对齐后再填充(详见 references/requirements.md)。
- 克隆样式生成:清空模板正文、保留样式与页面设置;逐章填充内容;表格单元格统一注入单实线边框、双向居中、首行缩进=无。
- 教材目录对齐(可选):若使用特定教材,读取其目录(扫描版 PDF 用 pypdfium2 渲染成图后读图),将“教学内容”项目与教材任务一一对齐并改写技能点/知识点。
- 健壮性校验:学时合计断言(理论32+实践32=64)放在
doc.save()之前;读模板/写输出加异常捕获;合并用统一merged()封装(先合并后写)。 - 交付与打包:用技能创建指南的
package_skill.py(Python zipfile,自动置 UTF-8 标志位)打包成python-curriculum-standard.zip,符合 SkillHub 上传规范。
运行方式
- 依赖:
pip install python-docx(建议在隔离 venv 中安装)。 - 默认运行(模板用包内 assets,输出到当前目录):
python scripts/generate_standard.py - 自定义模板/输出(命令行参数):
python scripts/generate_standard.py /path/to/模板.docx /path/to/输出.docx - 环境变量覆盖:
TPL_PATH=... OUT_PATH=... python scripts/generate_standard.py - 详见
references/usage.md。
关键约束(必须遵守,否则文档不合规)
- 字段顺序:基本信息表严格按 课程名称→课程代码→课程学分→课程学时→课程类别→课程性质→开课单位→考核方式→适用专业→开设学期。
- 课程性质选项顺序不可变:□公共基础课 在前,☑落在 专业基础课。
- 学时双重一致:第五章各项目“理论+实践”之和必须等于基本信息总学时。
- 重难点/思政点内联标记:★重点 ◆难点 ●思政。
- 表格单元格:楷体、水平+垂直双向居中、首行缩进=无;实线边框必须作为表格直接格式
tblBorders注入(仅靠样式名不够)。 - 合并单元格:先
merged()完成合并,再写内容;顺序颠倒会丢失文本。