如何按文件扩展名类型列表过滤s3 boto过滤对象

我想使用 boto3 资源对象过滤器过滤 s3 存储桶。此过滤器应基于文件类型 .png 和 .jpg。我做了

 client=boto3.resource('s3')
 bucket=client.Bucket(bucket name)
 objects=bucket.objects.filter(Prefix=file_name)

我想用列表 [.jpg,.png] 过滤。过滤器搜索中有条件查询吗?

stack overflow How to filter in s3 boto filter object by file extension type list
原文答案

答案:

作者头像

过滤搜索中有条件查询吗?

可悲的是,没有。您可以仅通过前缀拟合,而不是后缀。因此,在您下载所有名称后,您必须在自己身边进行所有过滤。例如,

objects = bucket.objects.all()

for obj in objects:
  if obj.key.endswith('.png') or obj.key.endswith('.jpg'): 
     # do what you need to do on such objects
作者头像

可悲的是,管理员隐藏了我的答案,因为它被认为是促进您的项目。我将使您的问题完全回答您的问题:

使用 s3pathlib ,您可以轻松地做:

# import
>>> from s3pathlib import S3Path

# define an s3 folder, tailing / indicate that it is a folder
>>> p_dir = S3Path("bucket", "path-to-my-folder/")

# use the built in filter
>>> for path in p.iter_objects().filter_by_ext(".jpg", ".png"):
...     print(path)

内置过滤器 filter_by_ext 的文档可以在此处找到 https://s3pathlib.readthedocs.io/en/latest/s3pathlib/core.html#s3pathlib.core.S3PathIterProxy.filter_by_ext

这不会被认为是促进您的项目,对吗?