Python:遍历目录并将所有文件夹名称、子文件夹和文件保存在 csv-file 中

Python: Walk through directory and save all foldernames, subfolder and files in a csv-file

我有一个充满音乐的目录。每个文件夹对应一个解释并包含每个专辑的文件夹。在这些 album-folder 中保存了所有标题。所以我们得到这个结构:

等等。

现在我想遍历这个目录,读出所有文件夹名称并将它们保存在 csv 文件中,如下所示:

最后,我可以打开 excel 中的 csv 文件并获得结构良好的音乐文件夹数据库。

我现在做了什么:

import csv
import os

PATH = "D:\Desktop\MusikAlt"
INTERPRETEN = []
ALBEN = []
TITEL = []


for Interpret, Album, Titel in os.walk(PATH):
    print('The current folder is ' + Interpret)
    INTERPRETEN.append(Interpret)

    for album in Album:
        print('Albums from the interpret: ' + Interpret + ': ' + album)
        ALBEN.append(album)

    for titel in Titel:
        print(titel)
        TITEL.append(titel)

    print('')

我现在正在努力,将列表修改为所需的结构并将它们传递到 csv 文件。 有什么想法吗?

非常感谢, 谢谢!

给定一个输入目录:

C:\DEMO
├───Interpret A
│   ├───Album A
│   │       Title 01
│   │       Title 02
│   │
│   └───Album B
│           Title 03
│           Title 04
│
└───Interpret B
    ├───Album C
    │       Title 05
    │       Title 06
    │
    └───Album D
            Title 07
            Title 08

此代码将执行您想要的操作。如果您的音乐标题中有 non-ASCII 个字符,encoding='utf-8-sig' 确保数据将被正确读取并显示在 Excel 中。 newline=''csv documentation 的要求,将阻止 Excel 来自 double-spacing 数据行。

import csv
import os

PATH = r"C:.\demo"

with open('data.csv','w',newline='',encoding='utf-8-sig') as f:
    w = csv.writer(f)

    # Write a header row
    w.writerow('Interpret Album Title'.split())

    # path is the current directory being walked.
    # dirs is a list of the directories in this path.  It can be edited to skip directories.
    # files is a list of files in this path.
    for path,dirs,files in os.walk(PATH):
        for file in files:
            # Join the path to the current file.
            current = os.path.join(path,file)
            # Remove the root path.
            # Split the remaining "Interpret\Album\Title" into a list.
            row = os.path.relpath(current,PATH).split(os.sep)
            w.writerow(row)

data.csv:

Interpret,Album,Title
Interpret A,Album A,Title 01
Interpret A,Album A,Title 02
Interpret A,Album B,Title 03
Interpret A,Album B,Title 04
Interpret B,Album C,Title 05
Interpret B,Album C,Title 06
Interpret B,Album D,Title 07
Interpret B,Album D,Title 08