python - 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']]
有没有办法在我的存储桶中排除某些键?还是只抓取顶级文件?
解决方案
根据您的结构,您可以在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')]
)
将条件更改为适合您的用例的任何内容。
推荐阅读
- visual-studio - 为 Outlook 2016 添加未运行
- java - How to add column field in pivottable using Apache POI
- sql - db_owner permissions
- php - 无法解析版本约束
- java - count the odd numbers in a specified range
- ios - How to internationalize iOS common plist resource file not "info.plist"?
- angular - 无法使用 jasmine 断言嵌套方法调用
- vb.net - 带有 Webbrowser 控件的 VB.Net/Word 访问 HtmlElement
- c - strace观察时可执行程序多次加载动态库
- angular - 我如何在另一个服务中使用 AlertService(用于错误消息的 matsnackbar)?