Archive Manager - 文件命名归档管理助手
概述
对指定文件夹下的 PDF 文件完成全流程归档管理:扫描新增文件 → OCR 识别内容 → 按强制规范重命名 → 按月份+业务类型分层归档 → 更新 Excel 台账。支持定时自动化和台账检索。
触发场景
- 用户说"文件命名归档""归档管理""自动归档""文件重命名归档"等关键词
- 用户要求对文件夹中的 PDF 进行重命名和分类归档
- 用户要求建立档案台账或查询已归档文件清单
- 用户要求设置定时自动归档任务
核心工作流
Step 1: 扫描新增文件
扫描目标文件夹顶层(不含子文件夹)的所有 PDF 文件。已归档到子文件夹中的文件不再处理。
确认目标文件夹路径。若用户未指定,询问用户目标文件夹路径。
Step 2: 文件内容识别
对每份 PDF 文件,按以下优先级提取文字内容:
- 文本层提取(优先):用
pymupdf的page.get_text()直接提取。电子发票等电子生成的 PDF 通常有文本层。 - OCR 识别(兜底):文本层为空时,用
pymupdf提取首页图片(dpi=300),再用rapidocr_onnxruntime做 OCR 识别。扫描件合同、扫描件验收单等走此路径。
识别以下关键字段(按业务类型):
| 业务类型 | 关键字段 |
|---|---|
| 买卖合同 | 订单编号、卖方名称、含税总金额、签订日期 |
| 电子发票 | 发票号码、销售方名称、价税合计、开票日期 |
| 市场调研表 | 项目名称、时间(调研/报价日期) |
| 到货验收单 | 项目名称、合同编号、供应商名称 |
若关键字段在 OCR 结果中缺失或不清晰,以更高 DPI(400)重新提取图片并 OCR。若仍无法确认,直接读取图片人工核对。
Step 3: 按强制命名规范重命名
详细命名规范见 references/naming_rules.md。核心规则:
| 业务类型 | 命名结构 | 示例 |
|---|---|---|
| 买卖合同 | 买卖合同-订单编号-卖方名称-含税总金额-签订日期 | 买卖合同-CGDD1022509032331-江苏京沪电缆有限公司-金额10350.00-20250924 |
| 电子发票 | 电子发票-发票号码-销售方名称-价税合计-开票日期 | 电子发票-25322000000479660449-江苏京沪电缆有限公司-金额9885.00-20251016 |
| 市场调研表 | 市场调研表-项目名称-时间 | 市场调研表-浙东D05大机电第四批电缆-20250910 |
| 到货验收单 | 到货验收单-项目名称-合同编号-供应商名称 | 到货验收单-S2025-11880-远东电缆有限公司 |
强制规则:
- 金额格式:金额XXXX.XX(保留两位小数)
- 日期格式:YYYYMMDD(无分隔符)
- 禁止文件名含有特殊符号、空格、无意义字符,用 - 连接各字段
- 到货验收单的项目名称为空时省略该字段
Step 4: 分层归档
按以下层级创建文件夹并归档:
目标文件夹/
├── YYYY-MM/ # 一级:归档月份(归档操作执行的月份)
│ ├── 买卖合同/
│ ├── 电子发票/
│ ├── 市场调研表/
│ └── 到货验收单/
└── 档案台账.xlsx
文件移动使用 PowerShell Move-Item(Windows 下 bash mv 可能因文件占用失败)。
Step 5: 更新 Excel 台账
在目标文件夹根目录维护 档案台账.xlsx,字段:
| 字段 | 说明 |
|---|---|
| 档案序号 | 递增整数 |
| 归档日期 | YYYY-MM-DD |
| 原始文件名 | 重命名前的文件名 |
| 标准化新文件名 | 按规范重命名后的文件名 |
| 文件夹存储路径 | 相对路径,如 2026-08\买卖合同 |
| 备注 | 关联信息、特殊说明等 |
用 openpyxl 读取现有台账,在末尾追加新记录,保持表头样式一致。台账不存在时新建。
Step 6: 清理与汇总
归档完成后清理临时 OCR 图片,输出本次处理的文件清单汇总。
可执行脚本
scripts/archive_scan.py
一键扫描+识别脚本。传入目标文件夹路径,自动完成:
- 扫描顶层 PDF
- 文本层提取 / OCR 识别
- 输出每份文件的识别结果(业务类型 + 关键字段)到 stdout
用法:
python scripts/archive_scan.py <目标文件夹路径>
环境依赖:pymupdf、rapidocr_onnxruntime、openpyxl(均需提前安装)。
OCR 运行时加 -W ignore 抑制 onnxruntime 警告。
自动化运维
定时自动归档
当用户要求设置定时归档时,使用 automation_update 工具创建 recurring 自动化任务:
- 名称:
归档管理-每日自动归档(或用户指定时间) - scheduleType:
recurring - rrule:
FREQ=DAILY;BYHOUR=16;BYMINUTE=0(默认每日16:00,可按用户要求调整) - prompt:包含完整归档流程指令(扫描→识别→重命名→归档→台账更新)
- cwds:目标文件夹路径
台账检索
用户要求筛选台账时,用 openpyxl 读取台账 Excel,按业务类型或时间范围筛选,输出清单。
技术要点
- Python 路径:使用系统已安装的 Python 3.x(优先使用 WorkBuddy 管理的 Python)
- PDF 文本提取:
pymupdf(import pymupdf或import fitz) - OCR 引擎:
rapidocr_onnxruntime(轻量级,无需 tesseract,首次使用需安装模型) - Excel 操作:
openpyxl(读写 xlsx,支持样式) - Windows 文件占用:bash
mv报 "Device or resource busy" 时改用 PowerShellMove-Item -Force - OCR 警告抑制:Python 命令加
-W ignore参数 - imghdr 兼容:Python 3.13 移除了
imghdr模块,需安装standard-imghdr包作为替代
参考文档
references/naming_rules.md:完整的命名规范、字段提取规则、边界情况处理