python - 如何将图像文件从 S3 存储桶直接读入内存?

标签 python matplotlib amazon-s3 boto3

我有以下代码

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import boto3
s3 = boto3.resource('s3', region_name='us-east-2')
bucket = s3.Bucket('sentinel-s2-l1c')
object = bucket.Object('tiles/10/S/DG/2015/12/7/0/B01.jp2')
object.download_file('B01.jp2')
img=mpimg.imread('B01.jp2')
imgplot = plt.imshow(img)
plt.show(imgplot)

并且有效。但它首先将文件下载到当前目录的问题。是否可以直接在 RAM 中读取文件并将其解码为图像?

最佳答案

我建议使用 io module直接将文件读入内存,根本不需要使用临时文件。

例如:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import boto3
import io

s3 = boto3.resource('s3', region_name='us-east-2')
bucket = s3.Bucket('sentinel-s2-l1c')
object = bucket.Object('tiles/10/S/DG/2015/12/7/0/B01.jp2')

file_stream = io.StringIO()
object.download_fileobj(file_stream)
img = mpimg.imread(file_stream)
# whatever you need to do

如果您的数据是二进制的,您也可以使用 io.BytesIO

关于python - 如何将图像文件从 S3 存储桶直接读入内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44043036/

相关文章:

javascript - 为什么浏览器不缓存 Amazon S3 上托管的 JS 文件?

amazon-web-services - 当 lex 不自动处理意图时如何调用 lambda?

python - 无法在两个 boto.cfg 文件之间切换

python - 在 Python 中使用 Bokeh hoovertool 工具提示函数可视化数据时出错

python - 更新 matplotlib 中的图形坐标

python - 如何使用 PyQtGraph 的 DateAxisItem?

python - 使用 cscope 用 VIM 浏览 Python 代码?

python - 如何在 matplot/python 中绘制这样的图表?

python - Matplotlib:在其他图形元素后面绘制网格线

python - 如何绘制标准差