如何解决从多个文件夹采样文件,得到 TypeChoice 错误
我目前正试图弄清楚如何从 多个 文件夹的跨度中对多个音频文件(样本大小为 50+)进行采样,以最终用于训练模型。显然,手动执行此操作会非常乏味,因此我试图弄清楚如何编写脚本来执行此操作:
import os
import sys
from pathlib import Path
import random
wav_pathlist = Path(src_dir).glob('**/*.wav')
lab_pathlist = Path(src_dir).glob('**/*.lab')
random_wav_list = []
for i in range(1,int(sample_size)):
random_wav_list.append(random.choice(wav_pathlist))
print(random_wav_list)
我目前的方法是通过 pathlib 使用水库采样来尝试获取随机样本。我能够获取文件路径,但它们以 PosixPath 形式返回。我已经能够通过强制转换来提取文件路径字符串,尽管我在尝试获取随机样本时遇到了一个错误;使用 random.choice()
应该为我提供一组文件路径的随机样本,但这给出了错误:TypeError: object of type 'generator' has no len()
,我不知道如何解决这个错误。
编辑:为了回应下面发布的答案,我尝试投射到如下所示的列表
random_wav_list = []
for i in range(1,int(sample_size)):
random_wav_list.append(random.choice(list(wav_pathlist)))
它给了我IndexError: Cannot choose from an empty sequence
解决方法
尝试将 wav_pathlist 转换为列表。
wav_pathlist = list(wav_pathlist)
for i in range(1,int(sample_size)):
random_wav_list.append(random.choice(wav_pathlist))
目前是一个生成器对象。 random.choice 使用 len() 操作来选择可迭代的随机元素,但生成器在设计上不支持 len 函数。您可以在此处阅读有关生成器的更多信息:https://wiki.python.org/moin/Generators
将生成器转换为列表通常会破坏生成器的目的(避免在内存中创建和存储整个可迭代对象)但对于您的用例来说这应该没问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。