You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:35:04