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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:01:43