Python实战:公园档案自动化整理与归档全流程
环境搭建与依赖安装
在进行公园档案整理之前,我们需要构建一个稳定且无需复杂配置的Python运行环境。本方案基于Python 3.8及以上版本开发,利用其强大的文件处理能力和数据分析库,实现从杂乱文件到结构化档案的自动流转。
你需要确保系统中已安装Python。打开终端或命令提示符,输入以下命令检查版本:
python --version
如果未安装,请直接访问Python官网下载安装包。安装完成后,我们需要安装三个核心库:pandas(用于生成Excel索引表)、openpyxl(用于处理xlsx文件格式)和shutil(Python内置库,用于高级文件操作)。请在终端执行以下安装命令:
pip install pandas openpyxl
安装过程中请确保网络连接正常,若下载速度过慢,可使用国内镜像源加速安装。环境准备完毕后,我们即可进入具体的目录规划阶段。
目录结构规划
为了实现自动化整理,必须预先定义好规范的目录结构。假设我们有一个名为“公园原始档案”的文件夹,里面混杂着各种格式的文件(如JPG图纸、DOCX文档、PDF报表等)。我们的目标是将这些文件按照“日期归档”和“文件类型”两个维度进行重新组织。
请在你的电脑D盘根目录下(或其他任意位置)创建一个名为ParkArchives的项目文件夹。并在其中创建以下子目录结构:
- ParkArchives/ (项目根目录)
- raw_data/ (存放待整理的杂乱文件)
- organized_data/ (存放整理后的档案)
- images/ (存放图片类文件)
- documents/ (存放文档类文件)
- others/ (存放其他类型文件)
- archive_script.py (我们将要编写的自动化脚本)
请将所有需要整理的公园档案文件复制到raw_data文件夹中。这种物理隔离的方式可以避免原文件被误操作,确保整理过程的安全性。
编写自动化整理脚本
接下来是核心环节,编写Python脚本。我们将创建一个完整的脚本,包含文件遍历、元数据提取、重命名逻辑、分类移动以及Excel索引表的生成。请在archive_script.py文件中输入以下代码。
导入模块与定义路径
脚本的第一部分主要是导入必要的库并设置文件路径常量。使用os模块处理路径,shutil模块处理文件移动,pandas用于数据记录。

import os
import shutil
import pandas as pd
from datetime import datetime
定义路径常量,请根据实际情况修改绝对路径
BASE_DIR = r"D:\ParkArchives"
SOURCE_DIR = os.path.join(BASE_DIR, "raw_data")
TARGET_DIR = os.path.join(BASE_DIR, "organized_data")
定义分类子文件夹
IMAGE_DIR = os.path.join(TARGET_DIR, "images")
DOC_DIR = os.path.join(TARGET_DIR, "documents")
OTHER_DIR = os.path.join(TARGET_DIR, "others")
确保目标文件夹存在,不存在则创建
for folder in [TARGET_DIR, IMAGE_DIR, DOC_DIR, OTHER_DIR]:
if not os.path.exists(folder):
os.makedirs(folder)
print("目录检查与初始化完成。")
文件分类与重命名逻辑
此部分代码实现了核心的整理逻辑。它会遍历源文件夹,根据文件扩展名判断类型,并根据文件的最后修改时间生成新的文件名。新文件名的格式设定为YYYYMMDD_原文件名,以便于按时间排序检索。
定义支持的文件类型后缀
IMAGE_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.gif'}
DOC_EXTENSIONS = {'.doc', '.docx', '.pdf', '.txt', '.xls', '.xlsx'}
用于存储档案索引信息
archive_index = []
def process_files():
files = os.listdir(SOURCE_DIR)
total_files = len(files)
if total_files == 0:
print("源文件夹中没有文件需要整理。")
return
print(f"开始处理 {total_files} 个文件...")
for index, filename in enumerate(files):
source_path = os.path.join(SOURCE_DIR, filename)
跳过文件夹,仅处理文件
if not os.path.isfile(source_path):
continue
获取文件信息
file_name, file_extension = os.path.splitext(filename)
file_extension = file_extension.lower()
获取文件最后修改时间并格式化
mod_timestamp = os.path.getmtime(source_path)
mod_date = datetime.fromtimestamp(mod_timestamp)
date_str = mod_date.strftime("%Y%m%d")
确定目标文件夹和类型标签
target_folder = OTHER_DIR
type_label = "其他"
if file_extension in IMAGE_EXTENSIONS:
target_folder = IMAGE_DIR
type_label = "图片"
elif file_extension in DOC_EXTENSIONS:
target_folder = DOC_DIR
type_label = "文档"
构造新文件名:日期_原文件名
new_filename = f"{date_str}_{filename}"
target_path = os.path.join(target_folder, new_filename)
处理重名冲突:如果目标文件已存在,则在末尾追加序号
counter = 1
while os.path.exists(target_path):
name_part, ext_part = os.path.splitext(new_filename)
target_path = os.path.join(target_folder, f"{name_part}_{counter}{ext_part}")
counter += 1
移动文件
try:
shutil.move(source_path, target_path)
print(f"[{index+1}/{total_files}] 已移动: {filename} -> {type_label}/{new_filename}")
记录到索引列表
file_info = {
"原始文件名": filename,
"新文件名": os.path.basename(target_path),
"归档日期": mod_date.strftime("%Y-%m-%d"),
"文件类型": type_label,
"存储路径": target_path,
"文件大小(KB)": round(os.path.getsize(target_path) / 1024, 2)
}
archive_index.append(file_info)
except Exception as e:
print(f"处理文件 {filename} 时出错: {e}")
process_files()
生成Excel索引表
文件整理完成后,我们通常会生成一份Excel清单,方便管理人员快速查阅。以下代码将利用pandas库将之前收集的archive_index列表转换为DataFrame,并保存为Excel文件。
def generate_report():
if not archive_index:
print("没有生成索引数据。")
return
创建DataFrame
df = pd.DataFrame(archive_index)
定义Excel输出路径
report_path = os.path.join(TARGET_DIR, f"公园档案索引表_{datetime.now().strftime('%Y%m%d%H%M%S')}.xlsx")
try:
保存到Excel,index=False表示不写入行索引
df.to_excel(report_path, index=False, engine='openpyxl')
print(f"\n整理完成!索引表已生成:{report_path}")
print(f"共整理文件 {len(archive_index)} 份。")
except Exception as e:
print(f"生成Excel报表失败: {e}")
generate_report()
执行脚本与结果验证
代码编写完毕后,保存文件。现在我们需要运行这个脚本来执行实际的整理操作。
打开命令提示符(CMD)或PowerShell,使用cd命令切换到项目目录:
cd D:\ParkArchives
然后执行Python脚本:
python archive_script.py
预期输出结果:
终端窗口将逐行显示文件的移动过程,例如:
目录检查与初始化完成。
开始处理 15 个文件...
[1/15] 已移动: 公园平面图.jpg -> 图片/20231015_公园平面图.jpg
[2/15] 已移动: 维护记录.docx -> 文档/20231020_维护记录.docx
...
整理完成!索引表已生成:D:\ParkArchives\organized_data\公园档案索引表_20231025143000.xlsx
共整理文件 15 份。
操作完成后,请打开organized_data文件夹。你会看到所有的图片、文档和其他文件已经被分门别类地放入了对应的子文件夹中,且文件名前面都加上了日期前缀。打开生成的Excel索引表,你可以看到包含原始文件名、新文件名、归档日期、文件类型和存储路径的详细清单。
这套方案完全基于本地运行,无需上传数据到云端,确保了公园档案数据的绝对安全。通过修改IMAGE_EXTENSIONS和DOC_EXTENSIONS变量,你可以轻松扩展支持更多的文件格式,满足不同场景下的档案整理需求。