如何使用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
相关产品推荐
相关产品推荐

