有没有一种方法可以为for循环的每次迭代自动生成一个空数组?

时间:2019-10-18 20:07:29

标签: python pandas scipy librosa

我试图为for循环的每个遍历创建一个单独的数组,以便存储wavefile.read函数生成的“ signal”值。

关于代码如何工作/ Id希望如何工作的一些背景:

我具有以下文件路径:

sub

现在,对于每个“标签文件夹”,我想创建一个数组来保存其各自子目录中包含的所有.wav文件的值。

这是我尝试的:

Root directory 
    Labeled directory
        Irrelevant multiple directories
            Multiple .wav files stored in these subdirectories

    Labeled directory
        Irrelevant multiple directories
            Multiple .wav files stored in these subdirectories

What dataframe df looks like

上面是数据帧df的快照

最终,这些数组的原因是我想计算每个标记的子目录中包含的wav文件的平均平均时间长度,并将其作为列向量添加到数据帧中。

请注意,数据框的索引与目录名称相对应。我感谢所有帮助!

1 个答案:

答案 0 :(得分:0)

您发布的代码段可以简化和现代化。这是我想出的:

我有以下目录结构:

在我的示例中,我使用的是文本文件而不是wav文件,因为我手边没有任何wav文件。 在我的root中,我有AB(它们应该是您的“标记目录”)。 A有两个文本文件。 B有一个立即文本文件和一个子文件夹,内部有另一个文本文件(这是为了模拟“无关的多个目录”)。

代码:

def main():

    from pathlib import Path

    root_path = Path("./root/")
    labeled_directories = [path for path in root_path.iterdir() if path.is_dir()]

    txt_path_lists = []

    # Generate lists of txt paths
    for labeled_directory in labeled_directories:
        txt_path_list = list(labeled_directory.glob("**/*.txt"))
        txt_path_lists.append(txt_path_list)

    # Print the lists of txt paths
    for txt_path_list in txt_path_lists:
        print(txt_path_list)

    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

输出:

[WindowsPath('root/A/a_one.txt'), WindowsPath('root/A/a_two.txt')]
[WindowsPath('root/B/b_one.txt'), WindowsPath('root/B/asdasdasd/b_two.txt')]

如您所见,我们生成了两个文本文件路径列表,每个带标签的目录一个。我使用的全局模式(**/*.txt)处理多个嵌套目录,并递归查找所有文本文件。您所要做的就是更改glob模式中的扩展名,使其改用.wav文件。