Python类中使用glob读取多级子目录文件返回空列表问题求助
问题原因
get_folder方法的子目录路径拼接逻辑存在错误,返回的目录路径均为无效路径,后续get_file方法基于无效路径执行glob匹配,因此返回全空列表。
具体错误:遍历到datasets/Actor1这类一级子目录时,os.listdir(f)返回的是该目录下的emotion1、emotion2等二级子目录名,原代码错误地将这些目录名与根路径self.path拼接,得到的路径为datasets/emotion1(实际不存在),而非正确的datasets/Actor1/emotion1。你之前认为get_folder返回符合预期,属于输出示例的判断误差,真实运行返回的路径均缺失Actor层级。
修复方案
修改get_folder方法中的路径拼接逻辑即可,修改后的完整代码如下:
import glob import os 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): # 将拼接根路径改为拼接当前遍历的一级子目录路径f dir_list = dir_list + [ os.path.join(f, elt) for elt in os.listdir(f) if os.path.isdir(os.path.join(f, elt)) ] return dir_list def get_file(self): dir_list = self.get_folder() sf_list = [] for line in dir_list: subfiles = glob.glob(os.path.join(line, "*.wav")) # 若需要扁平化的一维文件列表,将append改为extend即可 sf_list.append(subfiles) return sf_list
额外优化说明:glob匹配时指定*.wav后缀可以过滤非音频文件,避免返回不需要的目录或其他格式文件。
内容的提问来源于stack exchange,提问作者Girolamo
相关产品推荐
相关产品推荐

