将目录中的文件夹名称添加到文件名

3
我正在努力并苦苦挣扎,希望你们能帮我一下:
大家好, 我有一个文件夹,里面有很多子文件夹,最后一个子文件夹中有文件。我想编写Python代码,将目录中所有文件夹的名称添加到文件名的括号末尾。
例如,我的基本目录是C:\Users\cemil.kocyigit\Downloads\Code,它具有以下结构:
Folder_1
  > SubFolder_1
    > FileName1.abc
    > Filename2.abc
  > SubFolder_2
    > SubSubFolder_1
      > SubFileName1.abc

Folder_2
  > SubFolder11
    > FileName11.abc
    > Filename12.abc
    > ..............

Folder_3
  > Subfolder..........

我想将文件重命名为以下格式:FileName1(Subfolder_1)(Folder_1).abcSubFileName1(SubSubFolder_1)(Subfolder_2)(Folder_1).abc

到目前为止,我所做的是:

import os
    
    for root, dirs, files in os.walk("C:\\Users\\cemil.kocyigit\\Downloads\\Code"):
        if not files:
            continue
        prefix = os.path.basename(root)
        for f in files:
            base = os.path.basename(f)
            text = os.path.splitext(base)[0]
            extension = os.path.splitext(base)[1]
            os.rename(os.path.join(root, f), os.path.join(root, "{}({}){}".format(text, prefix, extension)))

用这段代码,我可以获取到前一个文件夹的文件夹名称,但无法获取该目录中所有文件夹的文件夹名称?
例如,我得到: FileName1(Subfolder_1).abc 有没有办法改变代码,使其递归地搜索基本目录中的所有文件夹,并将它们添加到文件名中?
(请不要评论我的写作,我是一名机械学生,正在入门编程 :))
谢谢!

仅为清晰起见,假设您从基本目录开始,在该目录中,您想将文件夹名称添加到文件名中?因此 tmp/folder_1/file_a.txt --> tmp/folder_1/file_a(folder_1).txt - Umar.H
1个回答

2
你可以先把所有的目录名收集到一个字符串中,然后在最终的文件名中使用该字符串。
import os

collected_dirnames = ""
for root, dirs, files in os.walk("C:\\Users\\cemil.kocyigit\\Downloads\\Code=3,56"):
    collected_dirnames = "-".join(dirs)

print(collected_dirnamee) # check if it is 2hat you want

# your code
for root, dirs, files in os.walk("C:\\Users\\cemil.kocyigit\\Downloads\\Code=3,56"):
    if not files:
        continue
    for f in files:
        base = os.path.basename(f)
        text, extension = os.path.splitext(base)
        os.rename(os.path.join(root, f),
                  os.path.join(root, "{}({}){}".format(text, collected_dirnames, extension)))

这是您想要的吗?至少应该指向正确的方向。


首先非常感谢!是的,那就是我想要得到的。但现在它只是将空字符串(括号中)添加到文件名...你有什么想法为什么会这样? - Cemil Kocyigit
如果没有目录,字符串将为空。请查看我的编辑,以检查收集的目录名字符串是否包含您所需的输出。 - Sparkofska
目录不是空的,它包含:文件夹 < 子文件夹 < 文件。"print(collected_dirnames)" 也是空的。或者你指的是其他什么? - Cemil Kocyigit
抱歉,我想问题有点不清楚。请查看我的编辑以查看示例 :) - Cemil Kocyigit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接