如何无需解压直接用Librosa加载ZIP压缩包内的音频文件?
无需解压加载ZIP中音频到Librosa的方案
直接利用Librosa支持类文件对象的特性,结合ZipFile模块就能实现,不用提前解压整个压缩包,有两种可行方式:
方式一:直接传递ZipFile打开的文件对象(适合多数WAV等格式)
import zipfile import librosa archive = zipfile.ZipFile('audio_data.zip', 'r') # 用with语句确保文件对象正确关闭 with archive.open('src_01.wav') as audio_file: y, sr = librosa.load(audio_file, sr=None) # sr=None保留原采样率,按需修改数值方式二:用BytesIO将音频内容读入内存(兼容需要随机访问的音频格式)
有些音频解码器要求文件支持随机读取操作,archive.open()返回的ZipExtFile对象可能无法满足,这时候可以先把音频内容读入内存,再用BytesIO模拟可随机访问的文件:import zipfile import librosa from io import BytesIO archive = zipfile.ZipFile('audio_data.zip', 'r') # 先读取音频文件的全部字节内容 audio_bytes = archive.read('src_01.wav') with BytesIO(audio_bytes) as audio_file: y, sr = librosa.load(audio_file, sr=None)
补充说明
Librosa的load函数并非只能接受文件路径,它还支持实现了标准文件读取接口(如read()、seek())的类文件对象。第二种方式通过内存缓存解决了部分格式对随机访问的要求,兼容性更强。
内容的提问来源于stack exchange,提问作者benjmerales
相关产品推荐
相关产品推荐

