Python实现批量重命名文件:将子文件夹名追加至文件名后方
问题描述
我的目录结构如下:
Parent-Folder - Sub-Folder1 - FileName.txt FileName.xml OtherFileName.xxx Sub-Folder2 - FileName.txt FileName.xml OtherFileName.xxx
期望修改后的目录结构:
Parent-Folder - Sub-Folder1 - FileName_Sub-Folder1.txt FileName_Sub-Folder1.xml OtherFileName_Sub-Folder1.xxx Sub-Folder2 - FileName_Sub-Folder2.txt FileName_Sub-Folder2.xml OtherFileName_Sub-Folder2.xxx
我已经实现了将子文件夹名放在文件名前面,但这不是我需要的效果。需要用Python实现正确的重命名逻辑。
我尝试了以下代码:
from os import walk, path, rename for dirpath, _, files in walk(r"C:\\Test\\TestFolder"): for f in files: rename(path.join(dirpath, f), path.join(dirpath, path.split(dirpath)[-1] + '_' + f)) import os for root, dirs, files in os.walk(r"C:\\Test\\TestFolder"): if not files: continue prefix = os.path.basename(root) for f in files: os.rename(os.path.join(root, f), os.path.join(root, "{}_{}".format(prefix, f)))
感谢帮助!
解决方案
要实现将子文件夹名放在文件名和扩展名之间的效果,你需要拆分文件名与扩展名,再将子文件夹名称插入到两者中间。修改后的代码如下:
import os # 目标根目录 root_directory = r"C:\Test\TestFolder" # 遍历目录下所有文件 for root, _, files in os.walk(root_directory): # 获取当前子文件夹的名称 subfolder_name = os.path.basename(root) for file in files: # 拆分文件名主体和扩展名 file_base, file_extension = os.path.splitext(file) # 构造新文件名:原文件名_子文件夹名.扩展名 new_filename = f"{file_base}_{subfolder_name}{file_extension}" # 拼接原文件路径和新文件路径 old_file_path = os.path.join(root, file) new_file_path = os.path.join(root, new_filename) # 执行重命名操作 os.rename(old_file_path, new_file_path)
关键说明:
os.path.splitext():专门用于拆分文件名和扩展名,能正确处理带多个点的文件名(比如file.name.txt会拆成("file.name", ".txt"))- 用f-string拼接新文件名,逻辑清晰且不易出错
- 遍历过程中只会处理子文件夹内的文件,不会对父文件夹本身产生影响
内容的提问来源于stack exchange,提问作者e33
相关产品推荐
相关产品推荐

