Using boto3, you can filter for objects in a given bucket by directory by applying a prefix filter.
Instead of iterating all objects using
for obj in my_bucket.objects.all(): pass # ...
(see How to use boto3 to iterate ALL objects in a Wasabi / S3 bucket in Python for a full example)
you can apply a prefix filter using
for obj in my_bucket.objects.filter(Prefix="MyDirectory/"): print(obj)
Don’t forget the trailing /
for the prefix argument ! Just using filter(Prefix="MyDirectory")
without a trailing slash will also match e.g. MyDirectoryFileList.txt
.
This complete example prints the object description for every object in the 10k-Test-Objects
directory (from our post on How to use boto3 to create a lot of test files in Wasabi / S3 in Python).
import boto3 # Create connection to 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' ) # Get bucket object my_bucket = s3.Bucket('boto-test') # Iterate over objects in 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
.
Example output:
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') [...]