Objekte in einem bestimmten S3-Verzeichnis mit boto3 filtern
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
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
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).
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.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')
[...]