You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据文件名列表批量重命名文件及os.rename报错排查

故障原因
  • 路径拼接错误:os.listdir(directory)仅返回目标文件夹下的文件名,不包含文件夹路径,直接调用os.rename(old_filename, new_filenames[index])时,系统会在Python脚本当前运行的工作目录下查找0001.jpg,而非你指定的Folder目录,自然找不到目标文件,这是触发FileNotFoundError的核心原因。
  • 未保留文件后缀:原文件是.jpg格式,你的新文件名没有携带对应后缀,就算路径正确,重命名后文件会变成无后缀格式,无法正常打开。
  • 隐藏逻辑风险:os.listdir默认返回的文件顺序不保证和0001、0002的数字序号一致,直接按遍历索引匹配新文件名,很容易出现文件和新名称对错位的问题。
  • 语法格式错误:原代码中os.rename行多了一层缩进,不符合Python缩进规则,运行时会先触发语法错误。
修正后可直接运行的代码
import os

# 配置项:替换为你的图片文件夹路径、完整新文件名列表
target_folder = "Folder"
new_filenames = ["Filename1", "Filename2", "Filename3"]  # 补全全部30个对应新名称

# 过滤出文件夹内的所有文件(排除子文件夹),并按原文件名的数字序号排序,保证顺序匹配0001/0002规则
file_list = [f for f in os.listdir(target_folder) if os.path.isfile(os.path.join(target_folder, f))]
file_list.sort(key=lambda x: int(x.split(".")[0]))

# 提前校验数量,避免索引越界
if len(file_list) != len(new_filenames):
    raise ValueError(f"数量不匹配:文件夹内共有{len(file_list)}个文件,新文件名列表共{len(new_filenames)}个,请检查")

# 遍历执行重命名
for index, old_name in enumerate(file_list):
    # 自动提取原文件后缀
    _, suffix = os.path.splitext(old_name)
    # 拼接完整的新旧文件路径
    old_full_path = os.path.join(target_folder, old_name)
    new_full_path = os.path.join(target_folder, f"{new_filenames[index]}{suffix}")
    os.rename(old_full_path, new_full_path)

print("批量重命名执行完成")
注意事项
  • 如果Folder文件夹不在脚本同级目录,将target_folder替换为文件夹绝对路径即可,Windows系统路径建议用正斜杠,例如"C:/Users/xxx/Pictures/我的图片集"。
  • 运行前确认new_filenames列表的顺序和你需要的0001到0030的对应关系完全一致,避免命名错位。

内容的提问来源于stack exchange,提问作者brutusbombocloth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:27:18