Objekte in einem bestimmten S3-Verzeichnis mit boto3 filtern

English Deutsch

Mit boto3 kann man Objekte in einem bestimmten Bucket nach Verzeichnis filtern, indem man einen Präfix-Filter anwendet.

Anstatt alle Objekte zu iterieren mit

s3_filter_example.py
for obj in my_bucket.objects.all():
    pass # ...

(siehe boto3 verwenden, um ALLE Objekte in einem Wasabi / S3-Bucket in Python zu iterieren für ein vollständiges Beispiel)

kann man einen Präfix-Filter anwenden mit

s3_filter_example.py
for obj in my_bucket.objects.filter(Prefix="MyDirectory/"):
    print(obj)

Den abschließenden / für das Präfix-Argument nicht vergessen! Nur filter(Prefix="MyDirectory") ohne abschließenden Schrägstrich würde auch z.B. MyDirectoryFileList.txt finden.

Dieses vollständige Beispiel gibt die Objektbeschreibung für jedes Objekt im Verzeichnis 10k-Test-Objects aus (aus unserem Beitrag boto3 verwenden, um viele Testdateien in Wasabi / S3 in Python zu erstellen).

s3_filter_full_example.py
import boto3

# Verbindung zu Wasabi / S3 herstellen
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-Objekt abrufen
my_bucket = s3.Bucket('boto-test')

# Über Objekte im Bucket iterieren
for obj in my_bucket.objects.filter(Prefix="MyDirectory"):
    print(obj)

Nicht vergessen, MY_ACCESS_KEY und MY_SECRET_KEY auszufüllen. Je nach Region und S3-kompatiblem Dienst muss möglicherweise eine andere Endpoint-URL anstelle von https://s3.eu-central-1.wasabisys.com verwendet werden.

Beispielausgabe:

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')
[...]

Check out similar posts by category: Python, S3