所以我的存储桶“ 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')
答案 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')
您会注意到,您可以使用resource
将client
转换为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()