Boto3:仅从 S3 资源中抓取选定的对象
Boto3: grabbing only selected objects from the S3 resource
我可以通过
抓取和读取我的 AWS S3 存储桶中的所有对象
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
all_objs = bucket.objects.all()
for obj in all_objs:
pass
#filter only the objects I need
然后
obj.key
会给我桶内的路径。
有没有办法预先过滤那些符合特定起始路径(存储桶中的目录)的文件,这样我就可以避免循环遍历所有对象并在以后过滤?
使用filter
[1], [2]类的收集方法,如bucket。
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
objs = bucket.objects.filter(Prefix='myprefix')
for obj in objs:
pass
如果我们只需要 object-keys 的列表,那么 bucket.objects.filter
是 list_objects 或 list_object_v2 的更好替代方案,因为这些函数有 1000 个对象的限制。参考:list_objects_v2
对于使用 boto3.client('s3')
而不是 boto3.resource('s3')
的人,您可以使用 'Prefix' 键过滤掉 s3 存储桶中的对象
import boto3
s3 = boto3.client('s3')
params = {
"Bucket": "HelloWorldBucket",
"Prefix": "Happy"
}
happy_objects = s3.list_objects_v2(**params)
以上代码片段将获取 'HelloWorldBucket' 中 'Happy' 文件夹中的所有文件。
PS:s3 中的文件夹只是一个构造,作为 file/object 名称的前缀实现。
我可以通过
抓取和读取我的 AWS S3 存储桶中的所有对象s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
all_objs = bucket.objects.all()
for obj in all_objs:
pass
#filter only the objects I need
然后
obj.key
会给我桶内的路径。
有没有办法预先过滤那些符合特定起始路径(存储桶中的目录)的文件,这样我就可以避免循环遍历所有对象并在以后过滤?
使用filter
[1], [2]类的收集方法,如bucket。
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
objs = bucket.objects.filter(Prefix='myprefix')
for obj in objs:
pass
如果我们只需要 object-keys 的列表,那么 bucket.objects.filter
是 list_objects 或 list_object_v2 的更好替代方案,因为这些函数有 1000 个对象的限制。参考:list_objects_v2
对于使用 boto3.client('s3')
而不是 boto3.resource('s3')
的人,您可以使用 'Prefix' 键过滤掉 s3 存储桶中的对象
import boto3
s3 = boto3.client('s3')
params = {
"Bucket": "HelloWorldBucket",
"Prefix": "Happy"
}
happy_objects = s3.list_objects_v2(**params)
以上代码片段将获取 'HelloWorldBucket' 中 'Happy' 文件夹中的所有文件。
PS:s3 中的文件夹只是一个构造,作为 file/object 名称的前缀实现。