如何批量移除子文件夹名称末尾的[Extra]后缀
如何批量移除子文件夹名称末尾的[Extra]后缀
嘿,这个批量重命名的需求我太熟了!看了你写的代码,问题出在几个关键细节上——比如你用了os.remove(suffix),这是用来删除文件的,完全不是重命名文件夹的操作,而且切换目录的步骤也多此一举,反而容易出问题。
给你两个靠谱的实现方案,都是直接批量处理文件夹重命名的,你挑顺手的用就行:
方案一:用Pathlib(现代、简洁,推荐)
Pathlib是Python 3.4+自带的路径处理模块,语法更直观,不用手动拼字符串路径:
from pathlib import Path # 替换成你的目标文件夹路径 target_path = Path(r"C:\Test") # 要移除的后缀 suffix = "[Extra]" # 递归遍历所有子文件夹(包括嵌套的) for dir_path in target_path.rglob("*"): # 只处理文件夹,且名称以[Extra]结尾 if dir_path.is_dir() and dir_path.name.endswith(suffix): # 计算新的文件夹名称:去掉末尾的[Extra] new_dir_name = dir_path.name[:-len(suffix)] # 拼接新的文件夹路径 new_dir_path = dir_path.parent / new_dir_name # 执行重命名 dir_path.rename(new_dir_path)
方案二:用os模块(兼容老版本Python)
如果你习惯用传统的os模块,也可以这么写,逻辑和上面完全一致:
import os path = r"C:\Test" suffix = "[Extra]" # topdown=False表示从最深层的子文件夹开始处理,避免重命名父文件夹影响后续遍历 for root, dirs, files in os.walk(path, topdown=False): for dir_name in dirs: if dir_name.endswith(suffix): # 拼接原来的文件夹完整路径 old_dir_full = os.path.join(root, dir_name) # 生成新的文件夹名称 new_dir_name = dir_name[:-len(suffix)] # 拼接新的文件夹完整路径 new_dir_full = os.path.join(root, new_dir_name) # 执行重命名 os.rename(old_dir_full, new_dir_full)
顺便提下你原来代码的问题:
os.remove(suffix):这个函数是用来删除文件的,参数需要传文件路径,你直接传个字符串[Extra],它会尝试删除当前目录下叫[Extra]的文件,完全不是你要的重命名操作。os.chdir(parentDirectory):完全没必要切换工作目录,直接通过路径拼接就能处理重命名,切换目录反而可能因为权限或者路径层级问题出错。
备注:内容来源于stack exchange,提问作者Brunooo
相关产品推荐
相关产品推荐

