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

Des*_*ner 5 python amazon-s3 amazon-web-services 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')
Run Code Online (Sandbox Code Playgroud)

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

s3.Bucket('test').objects.get(key='file.csv')
Run Code Online (Sandbox Code Playgroud)

我可以在不传递凭据的情况下获得相同的结果,如下所示:

s3 = boto3.client('s3')
obj = s3.get_object(Bucket='test', Key='file.csv')
Run Code Online (Sandbox Code Playgroud)

Joh*_*ein 5

如果您看一下该client方法:

import boto3

s3_client = boto3.client('s3')
s3_client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')
Run Code Online (Sandbox Code Playgroud)

resource方法:

import boto3

s3 = boto3.resource('s3')
s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')
Run Code Online (Sandbox Code Playgroud)

您会注意到您可以从 转换resourceclientwith 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')
Run Code Online (Sandbox Code Playgroud)