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

如何使用Python的os.walk修改根目录及子目录下文件扩展名?

解决os.walk遍历修改所有目录文件扩展名的问题

嘿,我来帮你搞定这个问题!你的出错代码里有两个关键问题,导致根目录和子目录的修改都失效了:

  • 遍历对象错误:os.walk已经帮你返回了当前遍历到的目录(root)下的所有文件(files),但你却还在调用os.listdir(os.path.dirname(path))去读取根目录的父目录文件,这完全偏离了目标。
  • 缺少完整路径拼接:os.walk返回的filename只是单纯的文件名,没有包含所在目录的路径。直接用os.rename(filename, ...)的话,程序会在当前工作目录找这个文件,而不是在对应的子目录里,自然找不到文件导致操作失效。

正确的实现代码

import os

# 替换成你的实际根目录路径,Windows下可以用r'C:\your_root_folder'这种格式
path = 'root folder'

# 遍历根目录及其所有子目录
for root, dirs, files in os.walk(path):
    for filename in files:
        # 拼接文件的完整路径,确保程序能定位到正确的文件
        full_file_path = os.path.join(root, filename)
        # 分离完整路径下的文件名和扩展名
        base_file, ext = os.path.splitext(full_file_path)
        # 判断扩展名是否为.prn,用lower()兼容大小写(比如.PRN也能匹配)
        if ext.lower() == ".prn":
            # 重命名文件,将扩展名改为.htm
            os.rename(full_file_path, base_file + ".htm")

代码关键点说明

  • os.path.join(root, filename):这是核心,把当前目录和文件名拼接成完整路径,确保程序能找到子目录里的文件。
  • ext.lower():避免因为扩展名大小写不一致导致漏处理(比如有的文件是.PRN而不是.prn)。
  • 直接遍历os.walk返回的files列表:不需要再额外调用os.listdir,os.walk已经帮你把每个目录下的文件都整理好了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:46:45