首页 > 解决方案 > AWS boto3 分页器:获取存储桶的子集并排除某些“目录”

问题描述

我有一个 s3“目录”,我想对其进行分页并获取所有键。键是这样的:

'myPrefix/output1.csv'
'myPrefix/output2.csv'
'myPrefix/output3.csv'
'myPrefix/inputs/'
'myPrefix/solutions/'

我只想抓取顶级键,所以所有.csv文件,并避免抓取inputs/solutions/目录

我可以像这样抓取我的 S3 存储桶中的所有密钥:

s3 = boto3.client('s3')
paginator = s3.get_paginator('list_objects_v2')
pages = paginator.paginate(Bucket='mybucket',
                           Prefix= 'myPrefix'
solutions_files = []
for page in pages:
    solutions_files += [obj['Key'] for obj in page['Contents']]

有没有办法在我的存储桶中排除某些键?还是只抓取顶级文件?

标签: pythonamazon-web-servicesamazon-s3boto3

解决方案


根据您的结构,您可以在list_objects_v2调用中将分隔符参数与前缀结合使用:https ://docs.aws.amazon.com/AmazonS3/latest/dev/ListingKeysHierarchy.html

否则,您可以在脚本中进行过滤,您已经以某种方式进行了过滤。

for page in pages:
    solutions_files.extend(
        [obj['Key'] for obj in page['Contents'] if obj['Key'].endswith('.csv')]
    )

将条件更改为适合您的用例的任何内容。


推荐阅读