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

如何读取tar.gz压缩包中的WAV音频文件?

解决tar.gz压缩包中WAV文件读取的TypeError问题

嘿,我来帮你搞定这个读取tar.gz音频包的问题!你遇到的TypeError其实是因为用错工具啦——gzip.open()只能处理单个压缩的文件,但music_train.tar.gz是个tar归档压缩包(里面装了好多个文件),直接用gzip读出来的是一堆二进制数据流,不是librosa能识别的文件路径或对象,自然就报错了。

正确姿势:用tarfile模块处理归档包

Python自带的tarfile模块就是专门对付这种多文件归档压缩包的,下面是修改后的可运行代码:

import tarfile
import librosa

# 打开tar.gz压缩包,r:gz表示读gzip压缩的tar包
with tarfile.open('music_train.tar.gz', 'r:gz') as tar:
    # 遍历包里的所有成员(文件+目录)
    for member in tar.getmembers():
        # 只处理后缀为.wav的实际文件,跳过目录和其他非音频文件
        if member.isfile() and member.name.endswith('.wav'):
            # 从归档里提取出文件对象
            audio_file = tar.extractfile(member)
            # 直接把文件对象传给librosa.load就行
            mono, fs = librosa.load(audio_file, sr=44100)
            # 这里可以加你自己的特征提取、数据分析代码啦
            print(f"处理完文件: {member.name} | 采样率: {fs} | 音频长度: {len(mono)}")

几个要注意的点:

  • tarfile.open的模式r:gz:明确告诉模块这是gzip压缩的tar包,不用自己额外解压缩。
  • 过滤文件:用member.isfile()跳过目录,endswith('.wav')只处理音频文件,避免读取无关文件报错。
  • 流式读取:这种方式不会把所有文件都解压到本地磁盘,处理大压缩包时更省空间也更快。

如果你的压缩包路径里有中文,记得确认Python环境的编码设置,不然可能会出现找不到文件的问题哦~

内容的提问来源于stack exchange,提问作者Jen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:39:13