Python实战:手把手教你自动生成档案整理目录与索引册

一、开发环境准备与依赖库安装

在进行档案数字化整理时,手动录入文件名和修改时间不仅效率低,而且极易出错。我们将使用Python构建一个自动化工具,它能扫描指定文件夹下的所有文件,根据文件的最后修改时间自动将其归类到对应的“年-月”文件夹中,并生成一份格式标准的Excel电子档案册。为了确保工具能够稳定运行,我们需要先配置Python环境。

请确保你的电脑上安装了Python 3.8或更高版本。如果尚未安装,请访问Python官方发布页面下载并安装:https://www.python.org/downloads/。安装时,务必勾选“Add Python to PATH”选项,以便在命令行中直接调用Python。

打开终端(Windows下为CMD或PowerShell,Mac下为Terminal),输入以下命令安装本项目必须依赖的三个第三方库:pandas用于处理数据表格,openpyxl用于设置Excel样式,pathlib用于处理跨平台文件路径:

pip install pandas openpyxl pathlib

如果安装速度较慢,可以使用国内镜像源进行安装:

pip install pandas openpyxl pathlib -i https://pypi.tuna.tsinghua.edu.cn/simple

二、整理逻辑与数据结构设计

在编写代码之前,我们需要明确“档案整理”的具体逻辑,这直接决定了代码的健壮性。我们的工具将执行以下核心操作:

  • 递归扫描: 遍历用户指定的源目录,获取所有文件的绝对路径、文件名、大小和修改时间。
  • 自动归档: 读取文件的“最后修改时间”,将其格式化为“YYYY-MM”形式。例如,修改时间为2023年5月12日的文件,将被移动到“整理后档案/2023-05”目录下。如果目标目录不存在,程序会自动创建。
  • 生成索引: 在移动文件的同时,记录文件的原始路径、新路径、文件大小和归档日期,并将这些数据暂存到内存中。
  • 导出档案册: 将内存中的数据写入Excel文件。为了符合“档案册”的视觉规范,我们将使用openpyxl设置表头加粗、冻结首行以及自动调整列宽。

三、完整自动化脚本代码

请新建一个文本文件,将其重命名为 archive_organizer.py,然后将以下完整的代码复制进去。这段代码包含了所有必要的逻辑,无需任何修改即可直接运行。

```python

import os

import shutil

import pandas as pd

from datetime import datetime

from openpyxl import load_workbook

from openpyxl.styles import Font, Alignment, PatternFill

from openpyxl.utils import get_column_letter

import sys

import platform

def format_size(size_bytes):

"""将字节转换为可读的文件大小格式"""

for unit in ['B', 'KB', 'MB', 'GB', 'TB']:

if size_bytes < 1024.0:

return f"{size_bytes:.2f} {unit}"

size_bytes /= 1024.0

return f"{size_bytes:.2f} PB"

def organize_and_catalog(source_dir, output_dir):

"""核心整理函数:移动文件并生成记录"""

if not os.path.exists(source_dir):

print(f"错误:源目录 {source_dir} 不存在!")

return

if not os.path.exists(output_dir):

os.makedirs(output_dir)

catalog_data = []

count = 0

print(f"开始扫描目录: {source_dir}")

遍历源目录

for root, dirs, files in os.walk(source_dir):

for filename in files:

file_path = os.path.join(root, filename)

获取文件修改时间

try:

mod_time = os.path.getmtime(file_path)

date_obj = datetime.fromtimestamp(mod_time)

folder_name = date_obj.strftime("%Y-%m")

date_str = date_obj.strftime("%Y-%m-%d %H:%M:%S")

构建目标路径

target_folder = os.path.join(output_dir, folder_name)

target_path = os.path.join(target_folder, filename)

创建目标文件夹

if not os.path.exists(target_folder):

os.makedirs(target_folder)

移动文件(处理重名)

final_target_path = target_path

counter = 1

while os.path.exists(final_target_path):

name, ext = os.path.splitext(filename)

final_target_path = os.path.join(target_folder, f"{name}_{counter}{ext}")

counter += 1

shutil.move(file_path, final_target_path)

获取文件大小

size_bytes = os.path.getsize(final_target_path)

size_readable = format_size(size_bytes)

记录数据

catalog_data.append({

"序号": len(catalog_data) + 1,

"档案名称": os.path.basename(final_target_path),

"归档日期": date_str,

"存储位置": final_target_path,

"文件大小": size_readable

})

count += 1

print(f"已处理: {filename} -> {folder_name}")

except Exception as e:

print(f"处理文件 {filename} 时出错: {e}")

return catalog_data

def create_excel_report(data, output_excel_path):

"""生成带样式的Excel档案册"""

if not data:

Python实战:手把手教你自动生成档案整理目录与索引册

print("没有数据可生成报告。")

return

df = pd.DataFrame(data)

先保存一个基础Excel文件

df.to_excel(output_excel_path, index=False, engine='openpyxl')

使用openpyxl加载进行样式调整

wb = load_workbook(output_excel_path)

ws = wb.active

定义样式

header_font = Font(name='微软雅黑', bold=True, color="FFFFFF")

header_fill = PatternFill(start_color="4F81BD", end_color="4F81BD", fill_type="solid")

align_center = Alignment(horizontal='center', vertical='center')

设置表头样式

for col in range(1, ws.max_column + 1):

cell = ws.cell(row=1, column=col)

cell.font = header_font

cell.fill = header_fill

cell.alignment = align_center

冻结首行

ws.freeze_panes = 'A2'

自动调整列宽

for column in ws.columns:

max_length = 0

column_letter = get_column_letter(column[0].column)

for cell in column:

try:

if len(str(cell.value)) > max_length:

max_length = len(str(cell.value))

except:

pass

adjusted_width = (max_length + 2) 1.2

ws.column_dimensions[column_letter].width = adjusted_width

wb.save(output_excel_path)

print(f"档案册已生成: {output_excel_path}")

if __name__ == "__main__":

配置路径:请根据实际情况修改这里的路径

Windows路径示例: r"C:\Users\Name\Downloads\混乱文件"

Mac/Linux路径示例: "/Users/Name/Documents/混乱文件"

为了演示安全,这里使用当前目录下的 '待整理档案' 作为源目录

current_dir = os.getcwd()

source_directory = os.path.join(current_dir, "待整理档案")

target_directory = os.path.join(current_dir, "已整理档案")

excel_output = os.path.join(current_dir, "档案整理索引册.xlsx")

提示用户创建测试目录(如果不存在)

if not os.path.exists(source_directory):

print(f"提示:源目录 {source_directory} 不存在,程序将自动创建用于演示。")

os.makedirs(source_directory)

创建一些测试文件

with open(os.path.join(source_directory_directory, "test1.txt"), "w") as f: f.write("old content")

with open(os.path.join(source_directory, "test2.txt"), "w") as f: f.write("new content")

print("=== 档案自动整理工具启动 ===")

print(f"源目录: {source_directory}")

print(f"目标目录: {target_directory}")

执行整理

records = organize_and_catalog(source_directory, target_directory)

生成报告

if records:

create_excel_report(records, excel_output)

else:

print("未发现任何文件。")

print("=== 任务完成 ===")

```

四、代码核心逻辑详解

上述代码虽然可以直接运行,但为了让你能够根据实际需求进行微调,我们需要对其中的关键技术点进行拆解。

1. 跨平台文件移动处理

代码中使用了 shutil.move() 而非 os.rename()。这是一个关键的技术细节。`os.rename` 仅能在同一个文件系统(磁盘分区)内移动文件,如果跨分区移动会报错。而 `shutil.move` 会自动检测底层架构,如果需要跨分区,它会先复制文件再删除源文件,确保在任何路径下都能安全归档。

2. 文件名冲突解决机制

在整理大量档案时,经常会遇到同名文件(例如不同文件夹下都有“数据表.xlsx”)。代码中的 while os.path.exists(final_target_path) 循环块专门用于处理这种情况。如果发现目标位置已有同名文件,它会自动在文件名后追加 `_1`, `_2` 等后缀,防止文件被意外覆盖。这对于数据安全至关重要。

3. Excel样式深度定制

普通的 `to_excel` 只能生成无格式的表格。为了符合“档案册”的专业要求,我们引入了 `openpyxl` 库。代码中定义了 `header_font` 和 `header_fill`,将表头设置为微软雅黑字体、白色文字、蓝色背景。同时,`ws.freeze_panes = 'A2'` 这行代码实现了“冻结首行”的效果,当档案条目过多需要滚动查看时,表头始终可见,极大提升了查阅体验。

五、运行操作与结果验证

代码准备就绪后,最后一步是实际运行并验证结果。请严格按照以下步骤操作,确保万无一失。

1. 准备测试数据

在代码所在的文件夹内,创建一个名为 “待整理档案” 的文件夹。为了测试效果,请在该文件夹内放入不同时间修改的文件(你可以右键点击文件 -> 属性 -> 修改时间,手动调整几个文件的日期到不同的月份,例如2022-11和2023-05)。

2. 执行脚本

在代码所在的目录打开命令行工具,输入以下命令启动程序:

python archive_organizer.py

如果一切正常,终端窗口会滚动显示处理日志,例如:“已处理: project.docx -> 2023-05”。

3. 检查输出结果

程序运行结束后,你会在当前目录下看到两个新生成的对象:

  • “已整理档案”文件夹: 打开它,你会看到文件已经按照“年-月”自动创建了子文件夹,所有文件都已经从“待整理档案”移动到了对应的月份子文件夹中。
  • “档案整理索引册.xlsx”文件: 使用Excel或WPS打开此文件。你会看到一个带有蓝色表头的专业表格,每一行都详细记录了文件名、归档日期、具体的存储路径和文件大小。

至此,你已完成了一个从零开始的自动化档案整理工具开发。这套方案不仅适用于个人文档整理,稍作修改(如连接FTP或数据库)即可应用于企业级的文档归档系统。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统