繁体   English   中英

从s3存储桶(boto3)获取特定文件

[英]Get a specific file from s3 bucket (boto3)

所以我在存储桶“ test”上有一个file.csv,正在创建一个新会话,我想下载该文件的内容:

session = boto3.Session(
aws_access_key_id=KEY,
aws_secret_access_key=SECRET_KEY
)
s3 = session.resource('s3')
obj = s3.Bucket('test').objects.filter(Prefix='file.csv')

这会返回一个集合,但是有没有办法直接获取文件? 没有任何循环,我想做类似的事情:

s3.Bucket('test').objects.get(key='file.csv')

我无需传递凭据即可达到相同的结果:

s3 = boto3.client('s3')
obj = s3.get_object(Bucket='test', Key='file.csv')

如果您查看client方法:

import boto3

s3_client = boto3.client('s3')
s3_client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')

resource方法:

import boto3

s3 = boto3.resource('s3')
s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')

您会注意到,您可以使用meta.clientresource转换为client

因此,将其与您的代码结合起来可获得:

session = boto3.Session(aws_access_key_id=KEY, aws_secret_access_key=SECRET_KEY)
s3 = session.resource('s3')
obj = s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')

我喜欢mpu.aws.s3_download ,但我有偏见;-)

它是这样的:

import os
import boto3

def s3_download(bucket_name, key, profile_name, exists_strategy='raise'):
    session = boto3.Session(profile_name=profile_name)
    s3 = session.resource('s3')
    if os.path.isfile(destination):
        if exists_strategy == 'raise':
            raise RuntimeError('File \'{}\' already exists.'
                               .format(destination))
        elif exists_strategy == 'abort':
            return
    s3.Bucket(bucket_name).download_file(key, destination)

对于身份验证,建议使用环境变量。 有关详细信息,请参见boto3:配置凭据

您可以使用以下boto3方法。

download_file(桶,密钥,文件名,ExtraArgs =无,回调=无,配置=无)

s3 = boto3.resource('s3')
s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')

在此处找到更多详细信息-download_file()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM