Сохраните DataFrame в Python как CSV и загрузите его на AWS S3 с открытым доступом - PullRequest
0 голосов
/ 25 сентября 2019

После подготовки набора DataFrames в python я бы хотел сохранить его непосредственно на Amazon AWS.

Мой код заканчивается примерно так:

new_output_csv = pd.read_csv("C:/Users/output.csv")
...
new_output_csv.to_csv("C:/Users/output1.csv", index=False)

Я пробовал:

import boto3

session = boto3.Session(
    aws_access_key_id='xxx',
    aws_secret_access_key='yyy',)
s3 = session.resource('s3')
s3.meta.client.upload_file(Filename='C:/Users/output1.csv', Bucket='test1234542', Key='output1.csv')

К сожалению, похоже, что модуль boto не работает.

Я использую Python 3.7.

Также необходимо, чтобы файл имел открытый доступ, потому что другая служба захватывает обновленный файл каждый день ...

Best Michi

Ответы [ 3 ]

0 голосов
/ 25 сентября 2019

Я думаю, этого достаточно.

import boto3

s3 = boto3.resource('s3', aws_access_key_id='xxx', aws_secret_access_key='yyy')
s3.Bucket('test1234542').upload_file('C:/Users/output1.csv', 'output1.csv')

Если вы хотите сделать объект общедоступным для чтения, тогда вы можете использовать команды ObjectAcl и put, см. документация .

object_acl = s3.ObjectAcl('bucket_name','object_key')
response = object_acl.put(
    ACL='private'|'public-read'|'public-read-write'|'authenticated-read'|'aws-exec-read'|'bucket-owner-read'|'bucket-owner-full-control',
    AccessControlPolicy={
        'Grants': [
            {
                'Grantee': {
                    'DisplayName': 'string',
                    'EmailAddress': 'string',
                    'ID': 'string',
                    'Type': 'CanonicalUser'|'AmazonCustomerByEmail'|'Group',
                    'URI': 'string'
                },
                'Permission': 'FULL_CONTROL'|'WRITE'|'WRITE_ACP'|'READ'|'READ_ACP'
            },
        ],
        'Owner': {
            'DisplayName': 'string',
            'ID': 'string'
        }
    },
    GrantFullControl='string',
    GrantRead='string',
    GrantReadACP='string',
    GrantWrite='string',
    GrantWriteACP='string',
    RequestPayer='requester',
    VersionId='string'
)

Тип гранта должен быть определен, т. е. группа и другие параметры являются опциями.Вам может понадобиться ACL для публичного чтения.

0 голосов
/ 26 сентября 2019

Я решил это:

s3 = boto3.resource('s3', aws_access_key_id='xxx', aws_secret_access_key='yyy')
s3.Bucket('test1234542').upload_file('C:/Admin/final1.csv', final1.csv', ExtraArgs={'ACL':'public-read'})
0 голосов
/ 25 сентября 2019

Это выдает ошибку или файл просто не отображается в S3?

Очень простая версия загрузки файла в корзину - получить саму корзину и использовать метод upload_file:

import boto3

session = boto3.Session(
    aws_access_key_id='xxx',

s3 = session.resource('s3')
bucket = s3.Bucket('test1234542')
bucket.upload_file('C:/Users/output1.csv', 'output1.csv')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...