当前位置: 首页 > 面试题库 >

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

阙庆
2023-03-14
问题内容

我有以下代码

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模块直接将文件读取到内存中,而根本不必使用临时文件。

例如:

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如果您的数据是二进制的,也可以使用。



 类似资料:
  • 有没有一种方法可以将文件列表从一个S3存储桶复制到另一个存储桶?两个S3存储桶都在同一个AWS帐户中。我可以使用aws cli命令一次复制一个文件: 然而,我有1000份文件要复制。我不想复制源存储桶中的所有文件,因此无法使用sync命令。有没有一种方法可以用需要复制的文件名列表来调用一个文件,从而自动化这个过程?

  • 使用Boto3,python脚本从S3桶中下载文件以读取它们,并将下载文件的内容写入名为的文件。 我的问题是,一旦脚本使用AWS Lambda函数,它将如何以相同的方式工作?

  • 问题内容: 我这样做是读取了S3存储桶中的文件名 现在,我需要获取文件的实际内容,类似于。什么是最好的方法? 问题答案: boto3提供了一种资源模型,该资源模型使诸如迭代对象之类的任务变得更加容易。不幸的是,StreamingBody不提供或。

  • 我试图读取CSV文件从私人S3桶到熊猫数据帧: 我可以从公共存储桶中读取文件,但从私有存储桶中读取文件会导致HTTP 403:禁止错误。 我已经使用aws配置配置了AWS凭据。 我可以使用boto3从私人存储桶下载文件,boto3使用aws凭据。似乎我需要配置pandas以使用AWS凭据,但不知道如何配置。

  • 问题内容: 我在下面有s3存储桶网址 s3_filename是 如果它是存储桶,我可以阅读以下代码 问题答案: 由于您似乎正在使用熊猫,因此请注意,它实际上是在盖子下使用的。因此,如果您的安装相对较新且标准,则可以直接执行以下操作: 如果您的存储桶有一些特定的配置,例如特殊凭证,KMS加密等,则可以使用显式配置的文件系统,例如: 就是说,如果您真的很想处理对象,而问题只是关于如何删除潜在的前缀然后

  • 我想读一本书的内容。存储在s3存储桶中的txt文件。 我试过: 但是我得到的s3file对象不包含文件的内容。 你知道该怎么做吗?