如何读取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
相关产品推荐
相关产品推荐

