簡體   English   中英

將 Python 中的 DataFrame 保存為 csv 並將其上傳到具有公共訪問權限的 AWS S3

[英]Save DataFrame in Python as csv and upload it on AWS S3 with public access

在 python 中准備一堆 DataFrame 后,我想直接將其保存在 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。

這也是必要的,該文件具有公共訪問權限,因為另一個服務每天都在獲取更新的文件......

最佳道

它是給你一個錯誤還是文件只是沒有出現在 S3 中?

將文件上傳到存儲桶的非常簡單的版本是獲取存儲桶本身並使用 upload_file 方法:

import boto3

session = boto3.Session(
    aws_access_key_id='xxx',
    aws_secret_access_key='yyy'
)

s3 = session.resource('s3')
bucket = s3.Bucket('test1234542')
bucket.upload_file('C:/Users/output1.csv', 'output1.csv')

我認為這就足夠了。

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')

如果要將 object 設為公共讀取,則可以使用ObjectAclput命令,請參閱文檔

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'
)

應該定義Grants Type,即Group,其他的都是選項。 您可能需要 ACL 才能公開閱讀。

我解決了它:

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'})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM