Python以递归方式遍历所有子目录并将文件名写入输出文件

时间:2018-04-28 18:44:34

标签: python

我想以递归方式遍历根文件夹中的所有子目录,并将所有文件名写入输出文件。然后在每个子目录中,在subdir中创建一个新的输出文件,并递归遍历其子目录并将文件名附加到新的输出文件。

因此,在下面的示例中,在Music文件夹下,它应创建一个Music.m3u8文件,并递归遍历所有子目录,并将每个子目录中的所有文件名添加到Music.m3u8文件中。然后在Rock文件夹中,创建一个Rock.m3u8文件并递归遍历Rock文件夹中的所有子目录,并在Rock.m3u8中的每个子目录中添加所有文件名。最后在每个Album文件夹中,使用其文件夹中的文件名创建Album1.m3u8,Album2.m3u8等。我怎么能在python3.6中做到这一点?

Music
....Rock
........Album1
........Album2
....Hip-Hop
........Album3
........Album4

这就是我所拥有的,但只是将每个文件夹的文件名添加到输出文件中,但不会以递归方式添加到根输出文件中。

import os

rootdir = '/Users/bayman/Music'
ext = [".mp3", ".flac"]
for root, dirs, files in os.walk(rootdir):
    path = root.split(os.sep)

    if any(file.endswith(tuple(ext)) for file in files):
        m3ufile = str(os.path.basename(root))+'.m3u8'
        list_file_path = os.path.join(root, m3ufile)
        with open(list_file_path, 'w') as list_file:
            list_file.write("#EXTM3U\n")
            for file in sorted(files):
                if file.endswith(tuple(ext)):
                    list_file.write(file + '\n')

1 个答案:

答案 0 :(得分:1)

你每次通过外循环做with open(list_file_path, 'w') as list_file:。但是你没有创建或写入任何顶级文件,所以当然你不会得到一个。如果你想要一个,你必须明确地创建它。例如:

rootdir = '/Users/bayman/Music'
ext = [".mp3", ".flac"]
with open('root.m3u', 'w') as root_file:
    root_file.write("#EXTM3U\n")
    for root, dirs, files in os.walk(rootdir):
        path = root.split(os.sep)
        if any(file.endswith(tuple(ext)) for file in files):
            m3ufile = str(os.path.basename(root))+'.m3u8'
            list_file_path = os.path.join(root, m3ufile)
            with open(list_file_path, 'w') as list_file:
                list_file.write("#EXTM3U\n")
                for file in sorted(files):
                    if file.endswith(tuple(ext)):
                        root_file.write(os.path.join(root, file) + '\n')
                        list_file.write(file + '\n')

(我只是在这里根据你的根文件猜测你真正想要的东西;你可能知道答案,并且不必猜测......)