如何用Python重命名子目录?仅保留子目录名称最后5位数字
解决目录重命名的问题
我来帮你梳理下问题出在哪,以及怎么修正~
你的原代码有两个关键问题:
os.rename(dir, dir[-5:])里的dir[-5:]是截取完整路径的最后5个字符,而不是目标目录名的最后5位,这会导致目录被移动到当前脚本的运行目录,而不是保留在原父目录下- 没有保留原目录的父路径,直接用短字符串作为新路径,完全偏离了预期的目录结构
修正后的代码
下面是可以实现你需求的代码,我会一步步解释:
import os # 这里替换成你的training目录的实际路径,比如"/home/xxx/data/training" test_path = "./training" # 用topdown=False从最底层目录开始重命名,避免修改父目录后影响子目录的路径 for root, dirs, files in os.walk(test_path, topdown=False): for dir_name in dirs: # 拼接出当前要修改的目录的完整路径 old_full_path = os.path.join(root, dir_name) # 只提取目录名的最后5位作为新名称 new_dir_name = dir_name[-5:] # 拼接出重命名后的完整路径(保留原父目录) new_full_path = os.path.join(root, new_dir_name) # 执行重命名操作 os.rename(old_full_path, new_full_path) print(f"已完成重命名:{old_full_path} → {new_full_path}")
关键逻辑说明
- 从下往上遍历:
topdown=False让我们先处理最内层的目录(比如1-ROI regi images-08456),再处理外层目录(比如07-21-2016-ABCD-67862),这样修改外层目录名时,内层目录的路径已经处理完成,不会出现找不到路径的问题 - 保留父目录路径:通过
os.path.join(root, new_dir_name)确保新目录依然在原来的父目录下,只是修改了目录名本身 - 正确提取目录名:用
dir_name[-5:]截取的是目录本身的名称的最后5位,而不是完整路径的最后5位,这才符合你的需求
额外注意事项
- 运行前建议先备份整个
training目录,避免意外操作导致数据丢失 - 如果存在目录名长度不足5位的情况,可以加个判断条件(比如
if len(dir_name) >=5),避免截取出错 - 确保脚本运行时有足够的权限修改目录名称
内容的提问来源于stack exchange,提问作者Mass17
相关产品推荐
相关产品推荐

