自动整理照片按日期分脚本

wen 实用脚本 2

告别照片堆积如山:用脚本实现按日期自动整理照片的终极指南


目录导读

  1. 痛点直击:为什么你的照片总是“乱成一锅粥”?
  2. 方案解析:自动整理照片按日期分脚本的工作原理
  3. 实操教程:从零开始编写你的第一个整理脚本(Python示例)
  4. 进阶技巧:如何应对重复照片、RAW格式与跨设备同步?
  5. 避坑指南:运行脚本前必须注意的3个致命错误
  6. 常见问题FAQ:关于脚本整理照片的10个高频问答

痛点直击:为什么你的照片总是“乱成一锅粥”?

手机、相机、无人机、截图……现代人的照片散落在各个设备中,手动按日期新建文件夹、拖拽文件不仅耗时耗力,还容易出错。根据统计,一个普通用户每年会产生超过3000张照片,如果不进行系统化管理,找一张特定照片平均需要花费2.5分钟。 而“自动整理照片按日期分脚本”正是解决这一痛点的利器:通过代码读取照片的EXIF信息(拍摄时间),自动创建 2024-01-15 这样的文件夹,并按规则移动文件,实现秒级归档。

自动整理照片按日期分脚本

方案解析:自动整理照片按日期分脚本的工作原理

核心逻辑只有三步:

  1. 扫描:遍历指定文件夹内所有图片文件(支持.jpg, .png, .heic, .raw等)。
  2. 提取时间:优先读取EXIF中的 DateTimeOriginal 字段;若缺失,则回退到文件系统的“创建时间”或“修改时间”。
  3. 移动与重命名:根据 年-月年-月-日 格式创建目标文件夹,并执行 shutil.move() 操作,高级脚本还能检测同名文件,自动添加后缀 _1, _2 防止覆盖。

实操教程:从零开始编写你的第一个整理脚本(Python示例)

以下脚本适用于Windows/macOS/Linux,需安装Python 3及Pillow库(用于读取EXIF),将以下代码保存为 organize_photos.py

import os
import shutil
from PIL import Image
from datetime import datetime
def get_date_taken(path):
    try:
        with Image.open(path) as img:
            exif = img._getexif()
            if exif and 36867 in exif:
                return datetime.strptime(exif[36867], '%Y:%m:%d %H:%M:%S')
    except:
        pass
    # 回退到文件修改时间
    return datetime.fromtimestamp(os.path.getmtime(path))
def organize(source_dir, dest_dir):
    for root, dirs, files in os.walk(source_dir):
        for file in files:
            if file.lower().endswith(('.jpg', '.jpeg', '.png', '.heic')):
                full_path = os.path.join(root, file)
                dt = get_date_taken(full_path)
                if dt:
                    folder_name = dt.strftime('%Y-%m-%d')  # 按日期分
                    target_folder = os.path.join(dest_dir, folder_name)
                    os.makedirs(target_folder, exist_ok=True)
                    shutil.move(full_path, os.path.join(target_folder, file))
                    print(f'已移动:{file} -> {folder_name}/')
if __name__ == '__main__':
    organize('/path/to/your/photos', '/path/to/sorted/photos')

关键点:使用 shutil.move 而非 os.rename 以支持跨磁盘移动;exist_ok=True 避免重复创建文件夹报错。

进阶技巧:如何应对重复照片、RAW格式与跨设备同步?

  • 去重逻辑:在移动前计算文件的MD5哈希值,存入一个集合,若新文件哈希值已存在,则视为重复,自动移入 duplicates/ 文件夹。
  • RAW+JPEG配对:对于同时有 .raw.jpg 的同名文件,脚本应优先处理JPEG,然后通过文件名匹配(IMG_001.rawIMG_001.jpg)将RAW文件移入同一日期文件夹。
  • 云同步无缝衔接:将整理后的根目录指向OneDrive或iCloud本地同步盘,即可实现“本地自动整理,云端实时备份”。

避坑指南:运行脚本前必须注意的3个致命错误

  1. 权限问题:确保目标硬盘有写入权限,否则脚本会中途报错。
  2. 文件名冲突:如果不同年份有同名文件(如 2023-05-01/IMG_001.jpg2024-05-01/IMG_001.jpg),目标文件夹不同则无碍,但若按纯日期分,需加入文件名前缀(如 20230501_IMG_001.jpg)避免混淆。
  3. 彻底测试不要直接在原始照片上运行! 先在副本文件夹中用 print 代替 move 进行“演练”,确认无误后再实际执行。

常见问题FAQ:关于脚本整理照片的10个高频问答

Q1:脚本会修改原始照片文件吗? A: 不会,脚本只读取EXIF信息并移动文件位置,不改变照片的像素数据,但请勿在移动过程中断电,以免文件损坏。

Q2:如果照片没有EXIF信息(如截图),还能按日期分吗? A: 可以,脚本会回退使用文件系统的“修改时间”,对于截图,通常修改时间即为创建时间,效果尚可。

Q3:如何按“年-月”而非“天”来分? A: 将代码中的 strftime('%Y-%m-%d') 改为 strftime('%Y-%m') 即可。

Q4:脚本支持短视频(.mp4)吗? A: 基础版不支持,但可以通过 os.path.getmtime 处理视频文件,略微修改上述代码即可扩展。

Q5:运行报错 ModuleNotFoundError: No module named 'PIL' 怎么办? A: 在命令行执行 pip install Pillow 安装依赖库。

Q6:能否整理NAS上的照片? A: 可以,只需将源路径和目标路径设置为网络挂载盘符即可,但受网络速度影响较大,建议先在本地测试。

Q7:整理后我还能找到原始照片的存放位置吗? A: 脚本执行后原始位置即被清空,建议在移动前先备份一份日志文件(记录每个文件的移动路径)。

Q8:如何让脚本自动检测新文件并实时整理? A: 你可以将该脚本与 cron(Linux/macOS)或“任务计划程序”(Windows)结合,设置每10分钟自动运行一次。

Q9:电脑中有多个磁盘分区,脚本能否处理跨分区移动? A: shutil.move 支持跨分区移动,但速度较慢(先复制再删除),建议将源和目标放在同一物理磁盘以提高效率。

Q10:有没有图形化的替代工具? A: 有,比如Adobe Bridge或Lightroom的自动导入功能,但脚本的优势在于免费、可定制、无侵入式批量处理,如果你熟悉命令行,脚本效率更高。


通过“自动整理照片按日期分脚本”,你不仅解放了双手,更建立了一套可持续的照片管理系统。真正的效率提升不在于节省一次整理的时间,而在于任何时候你都能在两秒内找到三年前拍的那张海边日落。 立即行动,让你的数字回忆井然有序吧。

抱歉,评论功能暂时关闭!