网站首页/ 信息中心/ 技术指南/

Python脚本实现日记档案自动分类重命名实战指南

发布时间:2026年06月17日 12:50:24 浏览量:0

一、环境准备与依赖安装

在开始编写代码之前,需要确保你的电脑上已经安装了Python环境。本方案将使用Python内置的osshutil模块进行文件操作,并使用第三方库Pillow来读取图片的拍摄时间(EXIF信息),以便更精准地按日期整理日记。

1. 安装Python环境

如果你的电脑尚未安装Python,请访问Python官网下载安装包。下载地址为:https://www.python.org/downloads/。下载时请务必勾选"Add Python to PATH"选项,这将在系统环境变量中自动配置Python路径。

安装完成后,打开终端(Windows下为CMD或PowerShell,Mac下为Terminal),输入以下命令验证安装是否成功:

python --version

如果返回了版本号(例如Python 3.10.0),说明环境配置正确。

2. 安装依赖库

我们需要安装Pillow库来处理图片文件的元数据。在终端中执行以下命令进行安装:

pip install Pillow

二、核心代码编写与逻辑解析

我们将创建一个名为organize_diary.py的脚本。该脚本的核心逻辑是:遍历指定文件夹下的所有文件,提取每个文件的“最后修改时间”或“拍摄时间”,根据日期创建“年/月”格式的文件夹结构,并将文件移动到对应的文件夹中,同时重命名文件以确保文件名包含具体日期。

1. 创建脚本文件

在你的工作目录下新建一个文本文件,将其重命名为organize_diary.py,并使用任意代码编辑器(如VS Code、Notepad++)打开它。

2. 导入必要模块

在文件开头写入以下导入代码:

import os
import shutil
from datetime import datetime
from PIL import Image, UnidentifiedImageError

3. 定义日期提取函数

我们需要一个函数来获取文件的日期。对于图片文件,优先尝试获取EXIF拍摄时间;对于其他文件或非标准图片,则回退使用文件的系统修改时间。

def get_file_date(file_path):
尝试获取图片的EXIF拍摄时间
try:
with Image.open(file_path) as img:
exif_data = img._getexif()
if exif_data:
36867 是EXIF中DateTimeOriginal的标签
date_str = exif_data.get(36867)
if date_str:
EXIF时间格式通常为 "YYYY:MM:DD HH:MM:SS"
return datetime.strptime(date_str, "%Y:%m:%d %H:%M:%S")
except (UnidentifiedImageError, AttributeError, IOError):
pass
如果无法获取EXIF,使用文件系统修改时间
timestamp = os.path.getmtime(file_path)
return datetime.fromtimestamp(timestamp)

4. 定义主整理函数

这是脚本的核心部分,负责遍历文件、创建目录、移动文件并重命名。

Python脚本实现日记档案自动分类重命名实战指南

def organize_diary(source_dir, target_dir):
确保目标目录存在
if not os.path.exists(target_dir):
os.makedirs(target_dir)
遍历源目录下的所有文件
for filename in os.listdir(source_dir):
file_path = os.path.join(source_dir, filename)
跳过目录,只处理文件
if not os.path.isfile(file_path):
continue
获取文件日期
file_date = get_file_date(file_path)
构建目标文件夹路径:目标目录/年/月
year_month = file_date.strftime("%Y/%m")
dest_folder = os.path.join(target_dir, year_month)
如果目标文件夹不存在,则创建
if not os.path.exists(dest_folder):
os.makedirs(dest_folder)
构建新文件名:原扩展名
使用时间戳确保文件名唯一
ext = os.path.splitext(filename)[1]
new_filename = file_date.strftime("%Y-%m-%d_%H-%M-%S") + ext
dest_file_path = os.path.join(dest_folder, new_filename)
处理文件名冲突(如果同一秒有多个文件)
counter = 1
while os.path.exists(dest_file_path):
new_filename = file_date.strftime("%Y-%m-%d_%H-%M-%S") + f"_{counter}" + ext
dest_file_path = os.path.join(dest_folder, new_filename)
counter += 1
移动文件
try:
shutil.move(file_path, dest_file_path)
print(f"已移动: {filename} -> {dest_file_path}")
except Exception as e:
print(f"移动失败 {filename}: {e}")

5. 添加程序入口

在脚本末尾添加执行代码。请将source_folder修改为你存放杂乱日记的实际路径,target_folder修改为你希望整理后保存的路径。

if __name__ == "__main__":
【注意】请将此处路径替换为你电脑上的实际路径
Windows路径示例: r"C:\Users\YourName\Documents\Diaries"
Mac路径示例: "/Users/YourName/Documents/Diaries"
source_folder = r"./my_diaries"
target_folder = r"./organized_diaries"
print(f"开始整理日记,源目录: {source_folder}")
organize_diary(source_folder, target_folder)
print("整理完成!")

三、脚本运行与效果验证

代码编写完成后,按照以下步骤执行脚本,完成日记档案的自动化整理。

1. 准备测试数据

在脚本同级目录下创建一个名为my_diaries的文件夹,放入几张不同日期的照片或文本文件,用于测试脚本的分类效果。

2. 运行脚本

在终端中切换到脚本所在目录,然后执行以下命令:

python organize_diary.py

3. 查看结果

脚本运行完毕后,你会在目录下看到新生成的organized_diaries文件夹。打开该文件夹,你会发现文件已经按照“年/月”的层级结构自动归档。例如,2023年10月的文件会被移动到organized_diaries/2023/10/目录下,且文件名已被重命名为2023-10-15_14-30-00.jpg这样的标准格式,便于后续检索。

四、进阶功能:自动生成目录索引

为了方便查阅,我们可以在整理完成后,自动生成一个Markdown格式的索引文件(README.md),列出所有已整理的文件清单。

1. 添加索引生成函数

将以下代码追加到organize_diary.py文件中:

def generate_index(target_dir):
index_path = os.path.join(target_dir, "README.md")
with open(index_path, "w", encoding="utf-8") as f:
f.write(" 日记档案索引\n\n")
遍历所有年份和月份文件夹
for year in sorted(os.listdir(target_dir)):
year_path = os.path.join(target_dir, year)
if not os.path.isdir(year_path):
continue
f.write(f" {year}年\n\n")
for month in sorted(os.listdir(year_path)):
month_path = os.path.join(year_path, month)
if not os.path.isdir(month_path):
continue
f.write(f" {month}月\n\n")
列出该月下的所有文件
files = sorted(os.listdir(month_path))
for file in files:
f.write(f"- {file}\n")
f.write("\n")
print(f"索引文件已生成: {index_path}")

2. 修改主程序入口

更新if __name__ == "__main__":部分的代码,在整理完成后调用索引生成函数:

if __name__ == "__main__":
source_folder = r"./my_diaries"
target_folder = r"./organized_diaries"
print(f"开始整理日记,源目录: {source_folder}")
organize_diary(source_folder, target_folder)
print("正在生成索引文件...")
generate_index(target_folder)
print("所有任务已完成!")

3. 最终验证

再次运行python organize_diary.py。任务完成后,打开organized_diaries文件夹,你会看到一个README.md文件。用文本编辑器打开它,你将看到一份结构清晰的文件目录树,所有日记按时间顺序排列,一目了然。

档案库房系统选型避坑指南,看完省下几十万
档案库房系统选型避坑指南,看完省下几十万
你有没有经历过这种事?老板突然冲进办公室,让你找一份三年前的合同。你满头大汗钻进库房,结果发现堆得像山的纸盒子上全是灰。你翻箱倒柜两小时,最后两手空空回去挨骂。这种痛,谁懂啊?其实,这不是你能力不行,...
2026年06月17日 12:50:24
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818