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

如何用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}")

关键逻辑说明

  1. 从下往上遍历:topdown=False让我们先处理最内层的目录(比如1-ROI regi images-08456),再处理外层目录(比如07-21-2016-ABCD-67862),这样修改外层目录名时,内层目录的路径已经处理完成,不会出现找不到路径的问题
  2. 保留父目录路径:通过os.path.join(root, new_dir_name)确保新目录依然在原来的父目录下,只是修改了目录名本身
  3. 正确提取目录名:用dir_name[-5:]截取的是目录本身的名称的最后5位,而不是完整路径的最后5位,这才符合你的需求

额外注意事项

  • 运行前建议先备份整个training目录,避免意外操作导致数据丢失
  • 如果存在目录名长度不足5位的情况,可以加个判断条件(比如if len(dir_name) >=5),避免截取出错
  • 确保脚本运行时有足够的权限修改目录名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:59:03