首页 > 解决方案 > 使用 boto3 键错误从 S3 下载文件

问题描述

我正在尝试从 S3 下载 joblib 文件,但出现密钥格式错误..

这是我的文件的 S3 路径:

"s3://v1/v2/v3/v4/model.joblib"

这是我的代码:

import boto3
bucketname = "v1" 
key = "v2/v3/v4"
filename = "model.joblib"
s3 = boto3.resource('s3')
obj = s3.Object(bucketname, key)
body = obj.get()['label_model.joblib'].read()

最终我希望能够做到:

from joblib import load

model = load("model.joblib")

我得到的错误:

NoSuchKey: An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.

标签: amazon-s3boto3

解决方案


您正在尝试访问没有文件名的文件。

你的代码是:

import boto3
bucketname = "v1" 
key = "v2/v3/v4"
filename = "model.joblib"
s3 = boto3.resource('s3')
obj = s3.Object(bucketname, key)
body = obj.get()['label_model.joblib'].read()

但是您需要将文件名添加到 key 变量中。这是从 s3 下载文件的示例:

bucketname = "v1"
key = "v2/v3/v4"
filename = "model.joblib"

s3 = boto3.resource('s3')
bucket = s3.Bucket(bucketname)

with open('filename', 'wb') as f:
    bucket.download_fileobj(f'{key}/{filename}', f)

推荐阅读