前言

随着日常外出拍景、扫街次数越来越多,拍摄后难免会删除废片,相机自带的照片序号变得断断续续,对强迫症来说及其不友好;尤其是,当照片编号达到数字阈值后,相机会自动新建文件夹并从头计数,后期翻看、整理、归档相册时十分混乱,手动改文件名耗时又低效。

为此分享一款 Python 批量重命名脚本,可统一读取目录内所有DSC开头的照片,按顺序重新编排文件名,一键规整相册文件,方便后期归档与查找。

脚本简要说明

该 Python 脚本仅针对尼康相机导出的DSC_开头照片文件:

  1. 自动识别脚本所在文件夹,区分打包 exe 与源码运行环境;

  2. 只筛选所有 DSC_前缀图片,按原文件名排序;如若其他文件名,请在代码区块中自行调整。

  3. 通过START_NUM自定义起始数字,统一重命名标准数字编号;

  4. 无需填写文件目录,直接在需要调整的目录下运行即可。

脚本

import os
import sys


def batch_rename_from_custom_number(start_number):
    # 1. 自动获取脚本当前所在的文件夹路径
    if getattr(sys, "frozen", False):
        current_folder = os.path.dirname(sys.executable)
    else:
        current_folder = os.path.dirname(os.path.abspath(__file__))

    script_name = os.path.basename(__file__)

    try:
        files = os.listdir(current_folder)
    except Exception as e:
        print(f"无法读取当前文件夹: {e}")
        return

    # 2. 过滤出以 'DSC_' 开头的文件,并排除脚本自身
    img_files = [
        f
        for f in files
        if f.upper().startswith("DSC_") and f != script_name
    ]

    # 3. 按照原文件名排序
    img_files.sort()

    if not img_files:
        print(f"在当前路径下没有找到符合 'DSC_' 开头的文件!")
        return

    print(f"当前路径:{current_folder}")
    print(
        f"共找到 {len(img_files)} 个文件,准备从 DSC_{start_number:04d} 开始顺次重命名...\n"
    )

    # 4. 核心:通过 start=start_number 让编号从指定的数字开始
    for index, old_name in enumerate(img_files, start=start_number):
        name_part, ext_part = os.path.splitext(old_name)

        # 生成新名字,:04d 保持 4 位数字格式
        new_name = f"DSC_{index:04d}{ext_part}"

        old_path = os.path.join(current_folder, old_name)
        new_path = os.path.join(current_folder, new_name)

        try:
            os.rename(old_path, new_path)
            print(f" 成功: {old_name}  -->  {new_name}")
        except Exception as e:
            print(f" 失败: {old_name} 出错: {e}")

    print("\n所有操作已完成!")
    input("\n按下回车键退出...")


if __name__ == "__main__":
    # 你想从哪个数字开始,就在这里改
    # 默认设置成 1,会自动生成 0001, 0002, 0003... 
    START_NUM = 1

    batch_rename_from_custom_number(START_NUM)

效果图