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

时间:2019-02-24 15:23:45

标签: python amazon-web-services amazon-s3 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')

3 个答案:

答案 0 :(得分:1)

如果您看一下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')

您会注意到,您可以使用resourceclient转换为meta.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')

答案 1 :(得分:0)

我喜欢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: Configuring Credentials

答案 2 :(得分:0)

您可以使用以下boto3方法。

  

download_file(桶,密钥,文件名,ExtraArgs = None,Callback = None,   Config = None)

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

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