我目前正在使用Amazon Web Services Lambda函数,我需要使用我在本地创建但现在存储在S3中的sklearn文件。我已经对如何实际执行此操作感到困惑,我已尝试过boto3的文档中的一些不同方法,但这会导致超时错误:
import boto3
import pickle
s3 = boto3.client("s3", region_name="us-west-1")
response = s3.get_object(Bucket="mybucket", Key="bin_files/scaler.pkl")
loaded_file = pickle.load(response["Body"])
另一方面,这样做会导致找不到文件错误:
with open(key, 'wb') as data:
s3.Bucket(event['bucket']).download_fileobj(key, data)
"errorMessage": "[Errno 2] No such file or directory:
'bin_files/scaler.pkl'"
有没有人对如何做到这一点有任何想法或提示?
答案 0 :(得分:2)
正确的代码:
with open('scaler.pkl', 'wb') as data:
s3.Bucket('bucket').download_fileobj(key, data)
如果要将s3文件下载到当前目录,则应该将 文件名 传递给文件open()方法和 不是整个密钥 。在您的情况下,您将bin_files/scaler.pkl
作为 文件名 传递。
在您的情况下,python代码将在当前工作目录(目录中执行boto脚本)中查找bin_files
目录并尝试编写scaler.pkl
在bin_files
目录中。由于目录不存在,因此会引发[Errno 2] No such file or directory
错误。
如果将 PATH 添加到文件名,则应确保整个 PATH 存在且具有适当的目录权限。