AWS boto3 分页器:获取存储桶的子集并排除某些'directories'



我有一个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']]

有没有办法排除我存储桶中的某些密钥?还是只获取顶级文件?

根据您的结构,您可能会在list_objects_v2调用中使用分隔符param和前缀: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')]
)

将条件更改为适合您的用例的条件。

最新更新