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

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()

运行代码时遇到两个问题:

  1. 现有代码仅支持jpg格式,无法适配png格式文件
  2. 代码执行后仅Folder 2内的文件被重命名,Folder 1未发生变更

问题根因分析

  1. 格式不兼容问题:代码硬编码输出文件后缀为.jpg,没有读取原文件的实际扩展名,所有文件不管原格式是什么都会被强制改为jpg后缀,不仅不支持png,还会导致非jpg文件因后缀不匹配无法打开。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:06:29