如何将图像文件从S3 bucket直接读取到内存中?

2024-09-29 23:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码

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中读取文件并将其解码为图像?


Tags: 文件代码importimgobjects3bucketmatplotlib
1条回答
网友
1楼 · 发布于 2024-09-29 23:29:58

格雷格·梅里特下面的答案是更好的方法

我建议在tempfile模块中使用Python的NamedTemporaryFile。它创建临时文件,文件关闭时将被删除(感谢@noamag)

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

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')
tmp = tempfile.NamedTemporaryFile()

with open(tmp.name, 'wb') as f:
    object.download_fileobj(f)
    img=mpimg.imread(tmp.name)
    # ...Do jobs using img

相关问题 更多 >

    热门问题