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

批量重命名文件夹时内部图片混杂问题的解决方法咨询

问题根因

文件夹内容混杂的核心原因是os.listdir()函数的返回值没有默认按自然排序规则排列,系统返回的文件夹顺序和你预期的Folder1、Folder2...的顺序不一致,导致重命名时新旧文件夹对应关系错乱,相当于把原Folder3重命名成了Name80、原Folder1重命名成了Name82这类,自然就会出现文件看起来“跑错文件夹”的情况。同时如果根目录下存在非文件夹的条目,也会导致下标错位,进一步加剧对应错误。

修复方案

首先需要对读取到的文件夹列表做自然排序,同时过滤掉非文件夹条目、增加校验逻辑避免操作失误,修复后的代码如下:

import os
import re

# 自然排序辅助函数,避免出现"Folder10"排在"Folder2"前面的问题
def natural_sort_key(s):
    _nsre = re.compile('([0-9]+)')
    return [int(text) if text.isdigit() else text.lower()
            for text in _nsre.split(s)]

root_path = 'C://Users//Downloads//Practice'
# 生成目标名称列表,range(80,130)刚好生成50个名称,和文件夹数量匹配
target_names = [f'Name{i}' for i in range(80, 130)]

# 仅读取目录下的文件夹,过滤文件、隐藏项等非目标条目
origin_folders = []
for entry in os.listdir(root_path):
    entry_full_path = os.path.join(root_path, entry)
    if os.path.isdir(entry_full_path):
        origin_folders.append(entry)

# 对原文件夹列表做自然排序,保证顺序和你预期的Folder1、Folder2...一致
sorted_origin_folders = sorted(origin_folders, key=natural_sort_key)

# 数量校验,避免下标越界导致重命名错误
if len(sorted_origin_folders) != len(target_names):
    raise ValueError(f"待重命名文件夹数量({len(sorted_origin_folders)})和目标名称数量({len(target_names)})不匹配,请检查根目录内容")

# 确认对应关系正确后再执行重命名
for old_name, new_name in zip(sorted_origin_folders, target_names):
    src = os.path.join(root_path, old_name)
    dst = os.path.join(root_path, new_name)
    # 首次运行可以先注释下面这行,先打印对应关系确认无误后再取消注释执行
    os.rename(src, dst)
操作注意事项
  • 重命名前建议先打印对应关系确认匹配正确,示例打印代码:
for old, new in zip(sorted_origin_folders, target_names):
    print(f"{old} -> {new}")
  • 尽量用os.path.join拼接路径,避免手动写斜杠导致的路径错误问题
  • 重要数据建议先备份再执行批量重命名操作,避免误操作导致数据丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:18:00