首页 > 解决方案 > 如何使用 boto3 在 Python 中将 S3 目录作为 os.path 获取?

问题描述

在 Python 中,我们通常处理这样的目录:

MODEL_DIR = os.path.join(ROOT_DIR, "logs")

但是,假设我在 S3 存储桶中有相同的日志目录,我应该如何获取 S3 上的路径strusing boto3

用例:

我正在编写一个 AWS Lambda 函数,它将权重从s3存储桶加载到Keras模型以返回预测。

标签: pythonamazon-web-servicesamazon-s3kerasboto3

解决方案


如果 Keras 直接支持 S3,那么请阅读 Keras 文档并按照它所说的去做。

如果 Keras 支持从内存中加载模型数据,则将文件从 S3 读取到内存中并从那里加载模型数据。例如:

import boto3
s3 = boto3.client('s3')
obj = s3.get_object(Bucket='mybucket', Key='data/input.csv')
contents = obj['Body'].read()
# model = load_model(contents)

如果 Keras 需要本地文件,则将文件从 S3 下载到 Lambda 中的 /tmp,然后从那里加载模型数据。例如:

import boto3
s3 = boto3.resource('s3')
s3.meta.client.download_file('mybucket', 'data/input.csv', '/tmp/input.csv')
# model = load_model('/tmp/input.csv')

我怀疑后者是您需要的,加载多个文件只需将每个文件从 S3 下载到 /tmp,然后从 /tmp 加载模型。


推荐阅读