Python如何将随机命名文件重命名为指定数字范围的有序文件名(如101-200)
自定义编号区间的批量重命名脚本修改方案
原脚本存在多个会导致文件混乱的核心问题,加上无法适配自定义编号区间的需求,需要从逻辑上做三处核心调整:
- 遍历目录文件时,先把已经符合
pic+数字+.jpg格式的存量文件过滤出来,不要把这些文件纳入待重命名的列表,避免打乱已经命名好的pic1~pic100的原有文件 - 把硬编码的起始编号、目录、文件前后缀抽成可配置参数,支持快速调整需要的编号区间
- 增加前置校验逻辑,防止因为待处理文件数量和区间不匹配、目标文件名已存在导致的文件覆盖、丢失问题
修正后可直接使用的代码
import os import re # 可自定义配置区域 TARGET_DIR = r"D:\Photos\Summer" FILE_NAME_PREFIX = "pic" FILE_NAME_SUFFIX = ".jpg" RENAME_START_INDEX = 101 # 新文件起始编号 RENAME_END_INDEX = 200 # 新文件终止编号 # 切换到目标操作目录 os.chdir(TARGET_DIR) # 正则匹配已经符合命名规则的文件,用于过滤待处理列表 standard_name_pattern = re.compile(rf"^{FILE_NAME_PREFIX}\d+{re.escape(FILE_NAME_SUFFIX)}$") # 收集所有需要重命名的随机命名文件 rename_targets = [] for entry in os.listdir(TARGET_DIR): # 只处理普通文件,跳过文件夹 if os.path.isfile(entry) and not standard_name_pattern.match(entry): rename_targets.append(entry) # 校验待处理文件数量和编号区间是否匹配 expected_count = RENAME_END_INDEX - RENAME_START_INDEX + 1 if len(rename_targets) != expected_count: print(f"操作终止:目录下待重命名的文件共{len(rename_targets)}个,和需要生成的{expected_count}个编号数量不匹配") else: current_index = RENAME_START_INDEX for old_file_name in rename_targets: new_file_name = f"{FILE_NAME_PREFIX}{current_index}{FILE_NAME_SUFFIX}" # 二次校验目标文件名是否已存在,避免覆盖原有文件 if os.path.exists(new_file_name): print(f"跳过重命名:目标文件{new_file_name}已存在") current_index += 1 continue os.rename(old_file_name, new_file_name) print(f"重命名完成:{old_file_name} -> {new_file_name}") current_index += 1
关键说明
- 原脚本中
path = os.chdir("D:\\Photos\\Summer")的写法是无效的,os.chdir没有返回值,原代码里path变量实际为None,修正版去掉了这个无效赋值 - 修正了原脚本不区分文件和文件夹的问题,仅对目录下的普通文件做重命名操作,避免误改动文件夹
- 脚本执行时只会修改不符合
pic+数字+.jpg格式的随机文件,已经存在的pic1~pic100这类合规文件不会被改动 - 需要调整编号区间的时候,直接修改
RENAME_START_INDEX和RENAME_END_INDEX的数值就行,不用改动核心遍历逻辑
操作提示:正式执行批量重命名前,建议先备份目标目录内的所有文件,避免脚本逻辑偏差导致的文件丢失。当前脚本仅处理目标目录下的一级文件,不会递归读取子文件夹内的内容。
内容的提问来源于stack exchange,提问作者don34664436
相关产品推荐
相关产品推荐

