Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python递归遍历所有子目录,并将文件名写入输出文件_Python - Fatal编程技术网

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

Python递归遍历所有子目录,并将文件名写入输出文件,python,Python,我希望递归遍历根文件夹中的所有子文件夹,并将所有文件名写入输出文件。然后在每个子目录中,在子目录内创建一个新的输出文件,递归遍历其子目录,并将文件名附加到新的输出文件中 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

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

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')
因此,在下面的示例中,它应该在Music文件夹下创建一个Music.m3u8文件,并递归遍历所有子目录,并将每个子目录中的所有文件名添加到Music.m3u8文件中。然后在Rock文件夹中,创建一个Rock.m3u8文件,递归遍历Rock文件夹中的所有子文件夹,并在Rock.m3u8中的每个子文件夹中添加所有文件名。最后,在每个相册文件夹中,使用文件夹中的文件名创建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')

每次通过外部循环,您都将open(list\u file\u path,'w')作为list\u 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')
(我只是猜测您在这个根文件中实际需要什么;您大概知道答案,不必猜测…)