我可以通过获取和读取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
Run Code Online (Sandbox Code Playgroud)
然后
obj.key
Run Code Online (Sandbox Code Playgroud)
会给我一条路径.
有没有办法事先过滤那些尊重某个起始路径(存储桶中的目录)的文件,这样我就可以避免遍历所有对象并在以后过滤?
我正在使用a Paginator来迭代S3存储桶的内容(在http://boto3.readthedocs.io/en/latest/guide/paginators.html#creating-paginators之后):
client = boto3.client('s3')
paginator = client.get_paginator('list_objects')
page_iterator = paginator.paginate(Bucket=<my_bucket>)
for page in page_iterator:
for object in page['Contents']:
key = object['Key']
Run Code Online (Sandbox Code Playgroud)
在此示例中,方法名称'list_objects'作为字符串传递.但是,我实际上想使用list_objects带有关键字参数的'partial'函数Prefix="files/",因为我感兴趣的对象位于files/'目录'中(参见http://boto3.readthedocs.io/en/latest/reference /services/s3.html#S3.Client.list_objects).
这可能吗?(从文档中我不清楚如何做到这一点;我可以if key.startswith("files/")在双for循环中做一个,但这似乎不是一个优雅的解决方案).