Python os模块批量重命名多文件夹文件的问题排查与求解
批量重命名图片脚本问题修复
场景与问题描述
现有多文件夹存放的图片需要批量重命名,目录结构如下:
- 父目录(Parent Dir)
- Folder 1:存放xyz.jpg、abc.png等图片文件
- Folder 2:存放def.jpg、xdd.png等图片文件
- rename.py:重命名执行脚本
初始使用的重命名代码如下:
## rename.py import os ## Function to rename def main(): folders = ["Folder_1", "Folder_2"] for folder_name in folders: for count, filename in enumerate(os.listdir(folder_name)): if folder_name == "Folder_1": dst = f"Folder_1 {str(count)}.jpg" src = f"{folder_name}/{filename}" dst = f"{folder_name}/{dst}" elif folder_name == "Folder_2": dst = f"Folder_2 {str(count)}.jpg" src = f"{folder_name}/{filename}" dst = f"{folder_name}/{dst}" os.rename(src, dst) if __name__ == '__main__': main()
运行代码时遇到两个问题:
- 现有代码仅支持jpg格式,无法适配png格式文件
- 代码执行后仅Folder 2内的文件被重命名,Folder 1未发生变更
问题根因分析
- 格式不兼容问题:代码硬编码输出文件后缀为
.jpg,没有读取原文件的实际扩展名,所有文件不管原格式是什么都会被强制改为jpg后缀,不仅不支持png,还会导致非jpg文件因后缀不匹配无法打开。 - Folder 1未生效问题:
- 首先是路径不匹配:代码中写的文件夹名是
Folder_1(带下划线),和实际目录名Folder 1(带空格)命名不一致,会导致路径读取失败 - 其次代码没有做条目类型校验:
os.listdir会把目录下的子文件夹、系统隐藏文件(比如Thumbs.db、.DS_Store)都列出来,遇到这些非图片文件执行重命名会报错,直接中断当前文件夹的遍历流程,跳转到下一个文件夹处理 - 另外手动拼接路径的写法跨系统兼容性差,Windows/macOS/Linux的路径斜杠规则不同,容易出现路径错误。
- 首先是路径不匹配:代码中写的文件夹名是
修正后代码
import os def main(): # 这里务必改成和你实际文件夹完全一致的名称,注意空格、大小写、下划线 folders = ["Folder 1", "Folder 2"] for folder_name in folders: # 校验文件夹是否存在,不存在则跳过 if not os.path.isdir(folder_name): print(f"文件夹 {folder_name} 不存在,跳过处理") continue count = 0 # 遍历文件夹内所有条目 for filename in os.listdir(folder_name): src_path = os.path.join(folder_name, filename) # 跳过子文件夹,只处理文件 if not os.path.isfile(src_path): continue # 提取原文件后缀,保留原格式 file_ext = os.path.splitext(filename)[1].lower() # 只处理jpg/png格式的图片,其他文件跳过,需要支持更多格式可以自行加后缀 if file_ext not in ['.jpg', '.jpeg', '.png']: continue # 生成新文件名,计数从1开始,需要从0开始可以把count+1改成count new_filename = f"{folder_name} {count+1}{file_ext}" dst_path = os.path.join(folder_name, new_filename) os.rename(src_path, dst_path) count += 1 print(f"文件夹 {folder_name} 处理完成,共重命名{count}个文件") if __name__ == '__main__': main()
使用注意事项
- 运行前先备份所有图片文件,避免重命名逻辑不符合预期导致文件混乱
- 把代码中
folders列表里的文件夹名,改成和你磁盘上实际的文件夹名完全一致,注意空格、下划线、大小写不要写错 - 脚本需要放在父目录下,和两个图片文件夹保持同级再运行
- 如果需要支持更多图片格式(比如webp、gif),直接在后缀判断的列表里加上对应后缀即可
内容的提问来源于stack exchange,提问作者afrologicinsect
相关产品推荐
相关产品推荐

