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
相关产品推荐
相关产品推荐

