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

Python以文件夹名为前缀批量重命名图片及报错解决

报错根因

所有FileNotFoundError都源于路径逻辑错误:os.listdir()仅返回目标目录下的文件/子文件夹名称,不携带完整路径。从你查询的当前工作目录结果来看,脚本运行位置是C:\Users\me\Jupiter_Notebooks\Dataset,而待重命名文件存放在Train\Cat子目录下,直接将os.listdir返回的纯文件名(如069.jpg)传入os.rename或shutil.copy时,Python会默认在当前工作目录(Dataset文件夹)下查找目标文件,自然无法找到对应文件触发报错。

可直接运行的修复代码

方案1:直接重命名(无原文件备份)

使用os.path.join自动拼接完整路径,同时增加前缀判断避免重复运行导致重复加前缀:

import os

# 目标Cat文件夹路径,字符串前加r表示原生字符串,无需手动转义反斜杠
cat_folder = r'C:\Users\me\Jupiter_Notebooks\Dataset\Train\Cat'
name_prefix = 'cat_'

for file_name in os.listdir(cat_folder):
    # 仅处理.jpg后缀、且未加过前缀的文件
    if file_name.endswith('.jpg') and not file_name.startswith(name_prefix):
        old_file = os.path.join(cat_folder, file_name)
        new_file = os.path.join(cat_folder, name_prefix + file_name)
        os.rename(old_file, new_file)

方案2:复制生成带前缀的新文件(保留原文件)

如果需要保留原始无前缀的文件,用shutil.copy替换os.rename即可:

import os
import shutil

cat_folder = r'C:\Users\me\Jupiter_Notebooks\Dataset\Train\Cat'
name_prefix = 'cat_'

for file_name in os.listdir(cat_folder):
    if file_name.endswith('.jpg') and not file_name.startswith(name_prefix):
        old_file = os.path.join(cat_folder, file_name)
        new_file = os.path.join(cat_folder, name_prefix + file_name)
        shutil.copy(old_file, new_file)
注意事项
  • 优先用os.path.join拼接路径,自动适配Windows系统的路径分隔符,避免手动拼接斜杠/反斜杠导致的路径错误
  • 你之前写的shutil版本存在冗余逻辑:目标Cat文件夹本身已存在,不需要在循环内重复判断、创建文件夹
  • 增加前缀判断后,即使重复运行代码,也不会出现cat_cat_069.jpg这类重复加前缀的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:57:35