水利普查档案数字化全流程指南:合规归档+效率提升实操方案
不少水利系统的朋友最近都在问,存量水利普查档案转数字化怎么才能符合归档要求,还能少踩坑?毕竟很多单位攒了十几年的普查档案,既有纸质的河湖勘测表、工程台账,也有老的光盘存储数据,整理起来头都大。这篇我就...
2026年08月22日 01:15:16
本系统基于Python实现,普通PC即可运行,要求Python版本≥3.8。
1. 安装Python:官网地址:https://www.python.org/downloads/,安装时务必勾选Add Python to PATH选项,避免后续路径问题。
2. 安装核心依赖:打开命令行(Windows按Win+R输入cmd,Mac/Linux打开终端),执行命令:pip install pyunpack patool,等待安装完成。
3. 安装系统级解压工具(否则无法处理RAR/7Z格式):
新建本地文件夹作为项目根目录,命名为「档案解压系统」,目录下需包含4个核心内容:

在项目根目录新建main.py,复制以下完整代码,无需修改,直接可用:
```python import os from datetime import datetime from pyunpack import Archive from patoolib import PatoolError 系统配置,无需调整 SOURCE = "./source" OUTPUT = "./output" ALLOWED_EXT = ('.zip', '.rar', '.7z', '.tar.gz') def init(): """初始化必要文件夹,不存在自动创建""" os.makedirs(SOURCE, exist_ok=True) os.makedirs(OUTPUT, exist_ok=True) print("系统初始化完成,待解压文件请放入source文件夹") def get_category(filename): """从压缩包文件名提取分类,格式为「分类-文件名.ext」""" name = os.path.splitext(filename)[0] return name.split('-')[0].strip() if '-' in name else "未分类" def extract(file_path): """单个压缩包解压逻辑,自动分类存放""" try: 生成带时间戳的解压路径,避免重名冲突 fname = os.path.basename(file_path) cat = get_category(fname) extract_path = os.path.join(OUTPUT, cat, f"{datetime.now().strftime('%Y%m%d%H%M%S')}_{fname}") os.makedirs(extract_path, exist_ok=True) 执行解压 Archive(file_path).extractall(extract_path) print(f"解压成功:{fname}") except PatoolError: print(f"解压失败{fname}:格式不支持或文件损坏") except Exception as e: print(f"解压失败{fname}:{str(e)}") def batch_process(): """批量处理source文件夹内的所有压缩包""" if not os.listdir(SOURCE): print("source文件夹为空,请放入压缩包") return for f in os.listdir(SOURCE): fp = os.path.join(SOURCE, f) if os.path.isfile(fp) and f.lower().endswith(ALLOWED_EXT): extract(fp) print("批量解压任务结束") if __name__ == "__main__": init() batch_process() ```命令行进入项目根目录(比如Windows执行cd C:\Users\你的用户名\Desktop\档案解压系统),输入命令:python main.py,按回车运行。
查看output文件夹,系统会自动按压缩包文件名前缀创建分类子文件夹,每个压缩包解压后生成带时间戳的文件夹,避免文件覆盖;source文件夹内的压缩包处理完成后不会被删除,可自行清理。
若需调整分类逻辑,修改代码中的get_category函数即可:
示例:按文件大小分类(大于100MB为大文件,小于为小文件),替换原有get_category函数为:
```python def get_category(filename): """按文件大小分类,单位MB""" fp = os.path.join(SOURCE, filename) size_mb = os.path.getsize(fp) / (1024 1024) return "大文件" if size_mb > 100 else "小文件" ```修改后重新运行main.py即可生效,适配不同的档案整理需求。