Python:如何从 S3 存储桶下载文件

ema*_*max 1 python amazon-s3 amazon-web-services boto3

我有一些数据存储在AWS S3存储桶中。

如果从终端我这样做:

aws s3 ls s3://myBucket/folder/ --profile myProfile
2020-04-23 01:04:09   96858539 2020-01-01-file.csv.gz
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用下载文件boto3

import boto3
session = boto3.session.Session(profile_name='myProfile')
s3 = boto3.resource('s3')
f1 = '2020-01-01-file.csv.gz'
s3.meta.client.download_file('myBucket', 'folder/%s'%f1, f1)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden
Run Code Online (Sandbox Code Playgroud)

Mar*_*cin 6

它对你不起作用的原因是你创建了 boto3session

会话 = boto3.session.Session(profile_name='myProfile')

而你却没有使用它。所以boto3.resource('s3')应该尝试而不是session.resource('s3')

但无论如何,boto3 文档有一整个部分称为“下载文件”。它显示了两个示例并进行了解释:

import boto3

s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')
Run Code Online (Sandbox Code Playgroud)

或者

s3 = boto3.client('s3')
with open('FILE_NAME', 'wb') as f:
    s3.download_fileobj('BUCKET_NAME', 'OBJECT_NAME', f)
Run Code Online (Sandbox Code Playgroud)