Python: как загрузить файл из корзины S3 - PullRequest
0 голосов
/ 08 мая 2020

У меня есть данные, хранящиеся в корзине AWS S3.

Если с терминала я делаю:

aws s3 ls s3://myBucket/folder/ --profile myProfile
2020-04-23 01:04:09   96858539 2020-01-01-file.csv.gz

Если я пытаюсь загрузить файл, используя 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)

Я получаю следующую ошибку

ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden

1 Ответ

3 голосов
/ 08 мая 2020

Причина , почему это не работает для вас , заключается в том, что вы создаете boto3 session

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

а вы не используете . Поэтому вместо boto3.resource('s3') следует попробовать session.resource('s3')

Но в любом случае в документации boto3 есть целый раздел под названием Downloading Files . Он показывает два примера с пояснением:

import boto3

s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')

или

s3 = boto3.client('s3')
with open('FILE_NAME', 'wb') as f:
    s3.download_fileobj('BUCKET_NAME', 'OBJECT_NAME', f)
...