Skip to content

About

自动识别学生会各部门成员课表PDF,提取无课时间段并写入Excel无课表

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

无课表自动识别脚本

自动识别电信学院学生会各部门成员的课表 PDF,提取无课时间段,批量生成 Excel 无课表。


快速开始

1. 安装 Python

需要 Python 3.10 或更高版本。从 python.org 下载安装,安装时务必勾选 "Add Python to PATH"。

安装完成后验证:

python --version
# 应输出 Python 3.10.x 或更高

2. 安装依赖

在项目根目录下打开终端,执行:

pip install -r requirements.txt

依赖说明:

  • pdfplumber — 解析 PDF 课表中的表格数据
  • openpyxl — 读写 Excel .xlsx 文件

国内网络较慢可使用清华镜像源:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后验证:

python -c "import pdfplumber; import openpyxl; print('依赖安装成功')"

2. 准备课表 PDF

将每个人的课表 PDF 放入 课表/ 目录下对应的部门文件夹中,文件名为姓名.pdf:

课表/
├── 主席团/
│   ├── 张三.pdf
│   └── 李四.pdf
├── 文艺部/
│   └── 王五.pdf
├── 秘书处/
│   └── 赵六.pdf
├── 体育部/
├── 外联部/
├── 学调部/
├── 宣传部/
├── 生活权益部/
├── 组织部/
└── 青马协/

课表 PDF 必须是教务系统导出的标准课表(含节次、星期、周次信息的表格形式)。

3. 运行脚本

在项目根目录下打开终端,执行:

python main.py <周次>

周次参数格式:

格式 示例 说明
单个数字 python main.py 5 只生成第5周
范围 python main.py 1-16 生成第1周到第16周(共16个Sheet)
逗号分隔 python main.py 1,3,5 生成第1、3、5周
混合格式 python main.py 1-8,10,12-16 范围和单周组合
不传参数 python main.py 交互式提示输入周次

运行输出示例:

$ python main.py 5
目标周次: [5]
正在解析PDF课表...
已解析 42 人, 开始生成各周数据...

处理第5周 → 第5周

完成! 已处理 42 人 × 1 周
输出文件: 第5周电信学院学生会无课表.xlsx

输出文件命名规则:

输入 输出文件名
5 第5周电信学院学生会无课表.xlsx
1-16 第1-16周电信学院学生会无课表.xlsx
1,3,5 第1,3,5周电信学院学生会无课表.xlsx

输出文件位于项目根目录下。


项目结构

无课表自动化脚本/
├── main.py                    # 入口:命令行解析与流程编排
├── config.py                  # 配置:路径、部门列表、Excel 布局常量
├── pdf_parser.py              # PDF 解析:提取课程节次、星期、周次
├── excel_writer.py            # Excel 写入:将无课数据填入模板
├── requirements.txt           # Python 依赖
├── 无课表模板/
│   └── 电信学院学生会无课表.xlsx   # Excel 模板(脚本基于此复制 Sheet)
└── 课表/                      # 课表 PDF 存放目录(按部门分子文件夹)

使用场景示例

场景一:生成本周无课表

文艺部部长想知道本周哪些成员有空,可以安排排练:

python main.py 8

生成 第8周电信学院学生会无课表.xlsx,打开即可查看各部门成员的空闲时段。

场景二:批量生成整学期无课表

学期初一次性生成所有周次的无课表,方便随时查阅:

python main.py 1-16

生成的 Excel 文件包含 16 个 Sheet(第1周 ~ 第16周),每个 Sheet 独立展示该周的无课情况。

场景三:只关心单双周

某些活动只在单周或双周进行,可以指定需要的周次:

python main.py 1,3,5,7,9,11,13,15    # 所有单周
python main.py 2,4,6,8,10,12,14,16   # 所有双周

添加 / 更新成员

  1. 从教务系统导出该成员的课表 PDF
  2. 将文件重命名为 姓名.pdf(如 张三.pdf)
  3. 放入对应部门文件夹(如 课表/文艺部/张三.pdf)
  4. 重新运行脚本即可

若成员转部门,将 PDF 移动到新部门文件夹即可,旧文件夹中的删除。


Excel 输出说明

每个周次对应一个 Sheet,表格布局如下:

节次 部门 周一 周二 周三 周四 周五 周六 周日
1_2节 秘书处 张三 张三 张三 张三 张三
1_2节 主席团
3_4节 秘书处 李四
... ... ... ... ... ... ... ... ...

读表规则:

  • 单元格中有姓名 → 该成员在此时段无课,可以安排工作
  • 单元格为空 → 该成员在此时段有课,不可安排
  • 多个姓名用逗号分隔 → 多人同时段无课
  • 5 个时间段:1_2节、3_4节、5_6节、7_8节、9_10节
  • 10 个部门:秘书处、青马协、生活权益部、体育部、外联部、文艺部、宣传部、学调部、组织部、主席团

支持的课表 PDF 格式

  • 标准教务系统导出的课表 PDF(含表格结构)
  • 周次格式:1-5周、9-11周(单)、2-16周(双)、1周
  • 同一时间段多门课程(不同周次交替上课)
  • 跨页 PDF(自动合并上下页的延续行)
  • 跨时间段课程(如 1-4节 同时覆盖 1_2节 和 3_4节)

配置说明

所有可配置项集中在 config.py 中,一般无需修改。

路径配置

变量 默认值 说明
TEMPLATE_PATH 无课表模板/电信学院学生会无课表.xlsx Excel 模板文件路径
SCHEDULE_DIR 课表/ 课表 PDF 存放目录

部门列表

DEPARTMENTS = [
    "秘书处", "青马协", "生活权益部", "体育部", "外联部",
    "文艺部", "宣传部", "学调部", "组织部", "主席团",
]

如需增删部门,修改此列表并在 课表/ 下创建对应文件夹。

时间段

BLOCK_NAMES = ["1_2节", "3_4节", "5_6节", "7_8节", "9_10节"]

对应一天5个上课时间段。如学校作息不同,可修改此列表。


常见问题

环境问题

Q: 运行报错 python 不是内部或外部命令 A: Python 未加入系统 PATH。重新安装 Python 时勾选 "Add Python to PATH",或手动将 Python 安装目录添加到系统环境变量。

Q: 运行报错 ModuleNotFoundError: No module named 'pdfplumber' A: 依赖未安装。执行 pip install -r requirements.txt。如果使用了虚拟环境,确保已激活。

Q: pip install 很慢或超时 A: 使用国内镜像源:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

PDF 问题

Q: 运行报错 找不到模板文件 A: 确保 无课表模板/电信学院学生会无课表.xlsx 文件存在,不要移动或删除。

Q: 某人的课表没有被识别 A: 可能原因:

  • PDF 文件名不是 姓名.pdf 格式(如含学号、多余空格等)
  • PDF 放在了错误的部门文件夹下
  • PDF 不是教务系统标准导出格式(扫描件、截图、手写课表无法解析)

Q: 生成的 Excel 中某些人显示有课,但实际没课 A: 检查 PDF 中的周次标注是否正确。脚本严格按照 PDF 中的周次信息判断(如 1-5周、9-11周(单))。

Q: 运行时出现大量警告信息 A: 通常是某些 PDF 格式不标准导致解析异常,不影响其他正常 PDF 的处理。检查警告中提到的文件是否为标准教务系统导出格式。

Excel 问题

Q: 输出的 Excel 打不开或提示损坏 A: 确保 openpyxl 版本 >= 3.1.0。执行 pip install --upgrade openpyxl 升级。

Q: 如何自定义 Excel 模板样式 A: 直接编辑 无课表模板/电信学院学生会无课表.xlsx,脚本会保留模板中的格式设置。注意不要删除 Sheet 或改变表格结构。

About

自动识别学生会各部门成员课表PDF,提取无课时间段并写入Excel无课表

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages