使用os库遍历百万歌曲数据集嵌套子文件夹.h5文件失败求助
解决百万歌曲数据集多层文件夹遍历问题
嘿,我来帮你搞定这个遍历文件夹的问题!首先咱们先拆解下你遇到的错误:
你写的entries = os.listdir(...)会返回父文件夹下所有子项(文件夹和文件)的名称列表,但接下来你把这个列表直接传给os.listdir(entries),而os.listdir()要求传入的是单个路径字符串,不是列表,这就是你看到listdir: path should be string...错误的原因。另外你代码里的continue逻辑也有问题——不管找到.h5还是其他文件,你都直接跳过了,根本没处理这些文件。
下面给你两种靠谱的解决方案,都能轻松遍历多层嵌套的文件夹:
方法1:用os.walk(经典递归遍历)
os.walk会自动递归遍历目标文件夹下的所有子目录,每次返回当前目录路径、子目录列表、当前目录的文件列表,非常适合处理多层嵌套场景:
import os # 替换成你的数据集根路径 root_path = "/Users/katherineperkins/Downloads/MillionSongSubset/data" # 遍历所有层级的文件夹 for current_dir, subdirs, files in os.walk(root_path): for file_name in files: # 只筛选.h5文件(如果不需要.py可以删掉这个判断条件) if file_name.endswith(".h5"): # 拼接出文件的完整路径 full_file_path = os.path.join(current_dir, file_name) print(full_file_path) # 在这里添加你的数据处理代码,比如读取.h5文件 # 示例:import h5py; with h5py.File(full_file_path, 'r') as f: ...
方法2:用pathlib(更简洁的现代写法)
如果你用的是Python 3.4及以上版本,推荐用pathlib模块,它是面向对象的路径处理工具,代码更简洁直观:
from pathlib import Path root_path = Path("/Users/katherineperkins/Downloads/MillionSongSubset/data") # 递归查找所有.h5文件(rglob表示递归匹配) for h5_file in root_path.rglob("*.h5"): # h5_file是Path对象,直接可以用于文件操作,也可以转成字符串str(h5_file) print(h5_file) # 读取文件示例:with h5_file.open('r') as f: ...
这两种方法都能完美遍历所有嵌套子文件夹里的.h5文件,你可以根据自己的习惯选择。记得把原来代码里无效的continue逻辑替换成实际的数据处理代码哦~
内容的提问来源于stack exchange,提问作者KPerkins
相关产品推荐
相关产品推荐

