批量重命名文件夹时内部图片混杂问题的解决方法咨询
问题根因
文件夹内容混杂的核心原因是
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
相关产品推荐
相关产品推荐

