如何使用 boto3 筛选给定 S3 目录中的对象
使用 boto3,你可以通过应用前缀筛选器按目录筛选给定 bucket 中的对象。
而不是使用以下命令遍历所有对象
s3_filter_example.py
for obj in my_bucket.objects.all():
pass # ...(完整示例请参见如何使用 boto3 遍历 Wasabi / S3 bucket 中的所有对象)
你可以使用以下命令应用前缀筛选器
s3_filter_example.py
for obj in my_bucket.objects.filter(Prefix="MyDirectory/"):
print(obj)不要忘记前缀参数的尾部 /!仅使用 filter(Prefix="MyDirectory") 而不带尾部斜杠也会匹配例如 MyDirectoryFileList.txt。
此完整示例打印 10k-Test-Objects 目录中每个对象的对象描述(来自我们关于如何使用 boto3 在 Wasabi / S3 中创建大量测试文件的文章)。
s3_filter_full_example.py
import boto3
# 创建到 Wasabi / S3 的连接
s3 = boto3.resource('s3',
endpoint_url = 'https://s3.eu-central-1.wasabisys.com',
aws_access_key_id = 'MY_ACCESS_KEY',
aws_secret_access_key = 'MY_SECRET_KEY'
)
# 获取 bucket 对象
my_bucket = s3.Bucket('boto-test')
# 遍历 bucket 中的对象
for obj in my_bucket.objects.filter(Prefix="MyDirectory"):
print(obj)Don’t forget to fill in MY_ACCESS_KEY and MY_SECRET_KEY. Depending on what region and what S3-compatible service you use, you might need to use another endpoint URL instead of https://s3.eu-central-1.wasabisys.com.
示例输出:
s3_object_examples.txt
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/10.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/100.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1000.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/10000.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1001.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1002.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1003.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1004.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1005.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1006.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1007.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1008.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/1009.txt')
s3.ObjectSummary(bucket_name='boto-test', key='10k-Test-Objects/101.txt')
[...]If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow