档案制度建设实操:基于Python构建企业级档案目录生成工具

一、环境准备与依赖安装

在开始构建档案目录生成工具之前,必须确保运行环境满足要求。本指南基于Python 3.9版本开发,利用其原生的pathlib库处理路径,无需安装复杂的第三方依赖,确保在Windows、Linux及macOS上均可直接运行。

1. 安装Python环境

如果尚未安装Python,请直接访问Python官网下载对应操作系统的安装包。请务必勾选"Add Python to PATH"选项,以便在命令行中直接调用。

  • Windows下载地址:https://www.python.org/downloads/windows/
  • 验证安装:打开终端或CMD,输入python --version,确认返回版本号为3.9或更高。

2. 创建项目目录

在本地磁盘创建一个名为archive_tool的文件夹,并在其中新建两个文本文件,分别重命名为config.jsonbuilder.py。我们将通过这两个文件实现从“制度定义”到“目录落地”的全过程。

二、定义档案分类标准配置

档案制度建设的核心在于“分类方案”的标准化。我们将通过JSON格式定义一套企业级的档案分类标准。这种方式既符合技术规范,又能让非技术人员通过修改文本文件直接调整制度。请打开config.json,粘贴以下完整配置代码:

```json { "archive_standard": { "org_name": "某某集团有限公司", "code_prefix": "ARC", "root_path": "./EnterpriseArchives", "retention_rules": { "Y": "永久", "30Y": "30年", "10Y": "10年" } }, "categories": [ { "code": "100", "name": "文书档案", "description": "行政管理、经营决策、人事管理等综合性文件", "sub_categories": [ { "code": "110", "name": "行政类", "retention": "30Y", "structure": ["年度", "保管期限", "机构问题"] }, { "code": "120", "name": "人事类", "retention": "永久", "structure": ["年度", "保管期限", "员工编号"] } ] }, { "code": "200", "name": "科技档案", "description": "产品研发、基本建设、设备仪器等技术性文件", "sub_categories": [ { "code": "210", "name": "产品研发", "retention": "30Y", "structure": ["项目代号", "阶段", "专业"] } ] }, { "code": "300", "name": "会计档案", "description": "凭证、账簿、报表等财务记录", "sub_categories": [ { "code": "310", "name": "会计凭证", "retention": "30Y", "structure": ["年度", "月份", "凭证号段"] } ] } ] } ```

上述配置文件定义了三个一级门类(文书、科技、会计)及其对应的二级门类。其中"structure"字段是关键,它决定了目录树的具体层级结构。例如,行政类档案将按照“年度 -> 保管期限 -> 机构问题”的顺序生成文件夹。

三、编写目录生成核心脚本

接下来编写解析配置并生成物理目录的Python脚本。该脚本将读取JSON配置,根据structure定义递归创建文件夹,并在每个最底层目录中生成一个README.md文件,用于指导业务人员如何归档。请打开builder.py,输入以下代码:

```python import json import os from pathlib import Path def load_config(config_path): """加载并验证JSON配置文件""" try: with open(config_path, 'r', encoding='utf-8') as f: return json.load(f) except FileNotFoundError: print(f"错误:找不到配置文件 {config_path}") exit(1) except json.JSONDecodeError: print(f"错误:{config_path} 格式不正确,请检查JSON语法") exit(1) def create_structure(base_path, structure_list, retention_rules, context_info): """ 递归创建目录结构 base_path: 当前基础路径 structure_list: 剩余待创建的层级列表 context_info: 上下文信息(用于生成README) """ if not structure_list: 到达最底层,创建说明文件 readme_content = f""" 归档说明目录 本目录用于存放:{context_info.get('category_name', '未知门类')} 所属全宗:{context_info.get('org_name', '未知机构')} 保管期限:{context_info.get('retention', '未定义')} 归档要求: 1. 请勿在此目录下直接创建文件夹,请将文件归档至对应年度或项目文件夹内。 2. 文件命名格式建议:日期-部门-题名(例如:20231012-财务部-年度预算批复.pdf) 3. 禁止存放涉密文件,如有涉密需求请联系信息中心。 """ (base_path / "README.md").write_text(readme_content, encoding='utf-8') return current_level = structure_list[0] remaining_levels = structure_list[1:] 根据层级类型生成预设文件夹 if current_level == "年度": 自动生成近5年及历史目录 for year in range(2020, 2026): year_path = base_path / str(year) create_directory(year_path) create_structure(year_path, remaining_levels, retention_rules, context_info) (base_path / "历史").mkdir(exist_ok=True) elif current_level == "保管期限": 根据配置生成保管期限目录 如果当前门类有特定期限,则优先使用,否则使用所有规则 specific_retention = context_info.get('retention') if specific_retention: retention_name = retention_rules.get(specific_retention, specific_retention) ret_path = base_path / retention_name create_directory(ret_path) create_structure(ret_path, remaining_levels, retention_rules, context_info) else: for code, name in retention_rules.items(): ret_path = base_path / name create_directory(ret_path) create_structure(ret_path, remaining_levels, retention_rules, context_info) elif current_level == "月份": for month in range(1, 13): month_str = f"{month:02d}月" month_path = base_path / month_str create_directory(month_path) create_structure(month_path, remaining_levels, retention_rules, context_info) else: 对于项目代号、机构问题等动态变量,创建一个占位符目录作为示例 placeholder_path = base_path / f"【{current_level}】请在此处创建具体文件夹" create_directory(placeholder_path) 这里不再递归,避免生成过多无意义空目录,实际业务中由人工创建下级 def create_directory(path): """创建目录并打印日志""" if not path.exists(): path.mkdir(parents=True, exist_ok=True) print(f"[创建目录] {path}") else: print(f"[目录已存在] {path}") def main(): config = load_config('config.json') 获取配置项 standard = config['archive_standard'] categories = config['categories'] root_path = Path(standard['root_path']) print(f"开始初始化档案库:{root_path.absolute()}") print(f"机构名称:{standard['org_name']}") 遍历所有一级门类 for cat in categories: cat_code = cat['code'] cat_name = cat['name'] cat_path = root_path / f"{cat_code} {cat_name}" create_directory(cat_path) 遍历二级门类 for sub_cat in cat.get('sub_categories', []): sub_code = sub_cat['code'] sub_name = sub_cat['name'] sub_path = cat_path / f"{sub_code} {sub_name}" create_directory(sub_path) 准备上下文信息用于生成README context = { 'org_name': standard['org_name'], 'category_name': sub_name, 'retention': sub_cat.get('retention') } 开始递归创建层级结构 create_structure( base_path=sub_path, structure_list=sub_cat['structure'], retention_rules=standard['retention_rules'], context_info=context ) print("\n档案目录结构初始化完成!") if __name__ == "__main__": main() ```

四、执行脚本与效果验证

代码编写完成后,即可进行实际操作。这一步将把数字化的制度转化为物理的文件夹结构。

档案制度建设实操:基于Python构建企业级档案目录生成工具

1. 运行生成命令

archive_tool文件夹下打开命令行终端,执行以下命令:

```bash python builder.py ```

2. 观察输出日志

终端将滚动显示创建过程,输出如下内容表示运行正常:

[创建目录] ./EnterpriseArchives
[创建目录] ./EnterpriseArchives/100 文书档案
[创建目录] ./EnterpriseArchives/100 文书档案/110 行政类
[创建目录] ./EnterpriseArchives/100 文书档案/110 行政类/2020
[创建目录] ./EnterpriseArchives/100 文书档案/110 行政类/2020/30年
...

3. 检查生成的目录结构

进入文件管理器,打开EnterpriseArchives文件夹。你将看到如下标准的树状结构:

EnterpriseArchives/
├── 100 文书档案/
│   ├── 110 行政类/
│   │   ├── 2020/
│   │   │   └── 30年/
│   │   │       └── README.md  (包含归档说明)
│   │   ├── 2021/
│   │   │   └── 30年/
│   │   │       └── README.md
│   │   └── ...
│   └── 120 人事类/
│       └── 2020/
│           └── 永久/
│               └── README.md
├── 200 科技档案/
│   └── 210 产品研发/
│       └── 【项目代号】请在此处创建具体文件夹
└── 300 会计档案/
└── 310 会计凭证/
└── 2020/
├── 01月/
├── 02月/
└── ...

打开任意一个README.md文件,你将看到根据该门类配置自动生成的归档说明,包含了保管期限和具体的命名规范建议。

五、扩展:合规性自动校验功能

制度建设不仅包括“建”,还包括“管”。为了确保员工上传的文件符合命名规范,我们可以增加一个简单的校验脚本。在archive_tool目录下新建validator.py,并输入以下代码:

```python import re import os from pathlib import Path 定义简单的命名规范正则:日期(8位)-部门-题名.扩展名 示例:20231012-财务部-预算.pdf NAMING_PATTERN = re.compile(r"^\d{8}-[^-]+-.+\.(pdf|doc|docx|jpg|png)$", re.IGNORECASE) def validate_directory(root_path): print(f"开始校验目录:{root_path}") error_count = 0 checked_count = 0 for file_path in Path(root_path).rglob(""): if file_path.is_file() and file_path.name != "README.md": checked_count += 1 if not NAMING_PATTERN.match(file_path.name): print(f"[违规] {file_path} 文件名不符合规范") error_count += 1 else: print(f"[通过] {file_path.name}") print(f"\n校验完成。共检查 {checked_count} 个文件,发现 {error_count} 个违规文件。") if __name__ == "__main__": 校验刚才生成的目录 target_dir = "./EnterpriseArchives" if os.path.exists(target_dir): validate_directory(target_dir) else: print("请先运行 builder.py 生成目录") ```

运行校验命令:

```bash python validator.py ```

此脚本将递归扫描所有生成的文件夹,并检查文件名是否符合“日期-部门-题名”的格式。对于不符合规范的文件,控制台将输出红色(或高亮)的[违规]提示。你可以根据实际业务需求修改NAMING_PATTERN正则表达式来调整严格程度。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统