boto3 S3 对象解析
Posted
技术标签:
【中文标题】boto3 S3 对象解析【英文标题】:boto3 S3 Object Parsing 【发布时间】:2018-02-26 22:04:02 【问题描述】:我正在尝试编写一个 Python 脚本来处理存储在 S3 上的音频数据。
我有一个正在调用的 S3 对象
def grabAudio(filename, directory):
obj = s3client.get_object(Bucket=bucketname, Key=directory+'/'+filename)
return obj['Body'].read()
访问数据使用
print(obj['Body'].read())
产生正确的音频信息。所以它从存储桶中访问数据就好了。
当我尝试在我的音频处理库 (pydub) 中使用这些数据时,它失败了:
audio = Audiosegment.from_wav(grabAudio(filename, bucketname))
Traceback (most recent call last):
File "split_audio.py", line 38, in <module>
audio = AudioSegment.from_wav(grabAudio(filename, bucketname))
File "C:\Users\jmk_m\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pydub\audio_segment.py", line 544, in from_wav
return cls.from_file(file, 'wav', parameters)
File "C:\Users\jmk_m\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pydub\audio_segment.py", line 456, in from_file
file.seek(0)
AttributeError: 'bytes' object has no attribute 'seek'
从 s3 进来的对象的格式是什么?我猜是字节数组?如果是这样,有没有办法将其解析为 .wav 格式而无需保存到磁盘?我正在尝试避免保存到磁盘。
也对其他音频处理库开放。
【问题讨论】:
您可以使用io.BytesIO
从bytes
创建一个类似文件的对象并将其传递给您的库:***.com/a/44437265/200603
【参考方案1】:
感谢 Linas 链接了一个类似的问题,感谢 Jiaaro 的回答。
import io
s = io.BytesIO(y['data'])
AudioSegment.from_file(s).export(x, format='mp3')
允许我直接从桶中拉到内存中
obj = s3client.get_object(Bucket=bucketname, Key=customername+'/'+filename)
data = io.BytesIO(obj['Body'].read())
audio = AudioSegment.from_file(data)
【讨论】:
以上是关于boto3 S3 对象解析的主要内容,如果未能解决你的问题,请参考以下文章
python Python3 / boto3多线程S3对象删除