os.walk重命名文件时无法识别含点号文件夹的问题如何修复?
问题根因
现有代码仅处理了os.walk()返回的文件集合files,未对同步返回的子目录集合subdirs做任何重命名操作,和目录名称是否带点号无关——os.walk本身可以正常识别名称含点的目录。
代码修改方案
需要做两处核心调整:
- 新增子目录名称匹配、重命名逻辑
- 目录重命名后必须更新
subdirs列表的对应元素:os.walk默认自上而下遍历,会依赖当前subdirs列表的名称进入子目录,不更新会导致后续子目录遍历失败
修改后的完整代码如下:
import os folder_path = "替换为你的目标目录路径" old = "abc" new = "def" for path, subdirs, files in os.walk(folder_path, topdown=True): # 处理当前目录下的文件 for name in files: if old in name: old_file_path = os.path.join(path, name) new_file_path = os.path.join(path, name.replace(old, new)) os.rename(old_file_path, new_file_path) # 处理当前目录下的子目录 for idx, dir_name in enumerate(subdirs): if old in dir_name: old_dir_path = os.path.join(path, dir_name) new_dir_name = dir_name.replace(old, new) new_dir_path = os.path.join(path, new_dir_name) os.rename(old_dir_path, new_dir_path) # 更新subdirs列表,保证后续子目录遍历正常 subdirs[idx] = new_dir_name
注意事项
- 代码中的
old和new必须定义为字符串类型,需要用引号包裹 - 建议先在测试目录验证逻辑符合预期后,再对正式目录执行操作,避免误改文件
内容的提问来源于stack exchange,提问作者Spatial Digger
相关产品推荐
相关产品推荐

