自定义音频数据集音频准备:Python代码列表生成问题修复请求
修复音频数据集整理代码的循环逻辑问题
问题根源
原代码核心错误在于循环内直接操作glob生成器,导致生成器被一次性耗尽,后续循环无法处理剩余文件;同时存在文件名提取、列表追加逻辑的不合理设计。
修复后的代码
import librosa from pathlib import Path import wave # 初始化三个目标列表 wavnames = [] wavsamples = [] wavsamplerates = [] # 目标文件夹路径 audio_folder = '/Users/abc/Desktop/WAV_Folder' # 获取所有WAV文件路径(生成器) pathlist = Path(audio_folder).glob('**/*.wav') def get_audio_samples(audio_path): # librosa加载音频,强制采样率44100,直接返回采样数组 y, sr = librosa.load(audio_path, sr=44100) return y # 遍历每个WAV文件 for audio_path in pathlist: # 提取纯文件名(不含路径) wavnames.append(audio_path.name) # 获取当前文件的采样数据并加入列表 samples = get_audio_samples(str(audio_path)) wavsamples.append(samples) # 获取当前文件的采样率并加入列表 with wave.open(str(audio_path), "rb") as wave_file: wavsamplerates.append(wave_file.getframerate())
关键修复点说明
文件名处理
- 原代码直接将生成器内容追加到
wavnames,既耗尽生成器又存储了完整路径;现在用audio_path.name提取纯文件名,每次循环追加单个文件名。
- 原代码直接将生成器内容追加到
采样数据列表修复
- 原函数将采样数组嵌套在列表中返回,且用
+=追加导致结构混乱;现在直接返回采样数组,用append加入wavsamples,保证每个元素对应一个文件的采样数据。
- 原函数将采样数组嵌套在列表中返回,且用
采样率列表修复
- 原代码每次循环创建空列表再追加属于冗余操作;现在直接将采样率值用
append加入列表,每个文件对应一个值。
- 原代码每次循环创建空列表再追加属于冗余操作;现在直接将采样率值用
循环逻辑修复
- 原循环内
wavnames += pathlist会一次性耗尽pathlist生成器,导致后续循环仅处理第一个文件;现在正常遍历生成器,每个循环处理一个文件。
- 原循环内
内容的提问来源于stack exchange,提问作者Laulito
相关产品推荐
相关产品推荐

