首页 > 解决方案 > 类中的 Python Glob 以访问文件中的元素

问题描述

您好,我在使用 glob 访问多个子目录中的文件列表时遇到问题。

这是我的代码:

class Folder:
    """Attempt to model typical folder."""

    def __init__(self, path):
        self.path = path

    def get_folder(self):
        files = glob.glob(os.path.join(self.path, "*"))
        dir_list = []

        for f in files:
            if os.path.isdir(f):
                dir_list = dir_list + [
                    os.path.join(self.path, elt) for elt in os.listdir(f)
                ]
        return dir_list

    def get_file(self):
        dir_list = self.get_folder()
        sf_list = []

        for line in dir_list:
            sep = os.path.sep
            subfiles = glob.glob(sep.join([line, "*"]))
            sf_list.append(subfiles)

        return sf_list


将其作为代码结构:

    datasets 
        Actor1,
            emotion1
                one.wav
                two.wav
            emotion2
                one.wav
                two.wav
        Actor2
            emotion1
                one.wav
                two.wav
            emotion2
                one.wav
                two.wav

我的输出Folder(datasets).get_folder()如下。

['...\\datasets\\Actor1\\emotion1',
 '...\\datasets\\Actor1\\emotion2',
 '...\\datasets\\Actor2\\emotion2',
 '...\\datasets\\Actor2\\emotion2',]

但是当我尝试访问子文件夹中的文件并将其保存到变量中时,调用 Folder(datasets).get_file() 而不是返回所有子文件,

['...\\datasets\\Actor1\\emotion1\\one.wav',
 '...\\datasets\\Actor1\\emotion1'\\two.wav',
 '...\\datasets\\Actor2\\emotion2\\one.wav',
 '...\\datasets\\Actor2\\emotion2\\two.wav',]

它输出多个空值的列表: Out[3]: [ [], [], [], []]

你能帮忙吗?

标签: pythonglob

解决方案


我尚未对此进行测试,但这对您来说可能是一个好的开始。

import pathlib

class Folder(pathlib.Path):
    def files(self):
        return [f for f in self.iterdir() if f.is_file()]

    def folders(self):
        return [f for f in self.iterdir() if f.is_dir()]

请参阅https://docs.python.org/3/library/pathlib.html#pathlib.Path.iterdir


推荐阅读