Wie kann ich sehen, womit sich in S3 ein Bucket befindet boto3
? (dh ein "ls"
)?
Folgendes tun:
import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('some/path/')
kehrt zurück:
s3.Bucket(name='some/path/')
Wie sehe ich den Inhalt?
Eine Möglichkeit, den Inhalt anzuzeigen, wäre:
for my_bucket_object in my_bucket.objects.all():
print(my_bucket_object)
mybucket.objects.filter(Prefix='foo/bar')
und es werden nur Objekte mit diesem Präfix aufgelistet. Sie können auch einenDelimiter
Parameter übergeben.object
einen Variablennamen zu verwenden, da dieser den globalen Typ beschattetobject
.Dies ähnelt einem 'ls', berücksichtigt jedoch nicht die Präfixordner-Konvention und listet die Objekte im Bucket auf. Es bleibt dem Leser überlassen, Präfixe herauszufiltern, die Teil des Schlüsselnamens sind.
In Python 2:
In Python 3:
quelle
conn.list_objects(Bucket='bucket_name', Prefix='prefix_string')['Contents']
Ich gehe davon aus, dass Sie die Authentifizierung separat konfiguriert haben.
quelle
Wenn Sie die Schlüssel ACCESS und SECRET übergeben möchten (was Sie nicht tun sollten, da dies nicht sicher ist):
quelle
Um große Schlüssellisten zu verarbeiten (dh wenn die Verzeichnisliste größer als 1000 Elemente ist), habe ich den folgenden Code verwendet, um Schlüsselwerte (dh Dateinamen) mit mehreren Listen zu akkumulieren (danke an Amelio oben für die ersten Zeilen). Code ist für Python3:
quelle
Meine s3-
keys
Dienstprogrammfunktion ist im Wesentlichen eine optimierte Version von @ Hephaestus 'Antwort:In meinen Tests (boto3 1.9.84) ist es deutlich schneller als der entsprechende (aber einfachere) Code:
Da S3 binär sortierte UTF-8-Ergebnisse garantiert
start_after
, wurde der ersten Funktion eine Optimierung hinzugefügt.quelle
list()
, um eine Liste von Dateien zurückzugeben.Eine sparsamere Methode, anstatt über eine for-Schleife zu iterieren, können Sie auch einfach das Originalobjekt drucken, das alle Dateien in Ihrem S3-Bucket enthält:
quelle
files_in_s3
es sich um ein " Listenobjekt " handelt. In Python gibt es so etwas nicht. Es ist eher iterierbar und ich konnte Ihren Code nicht zum Laufen bringen und habe ihn daher herabgestimmt. Dann habe ich den Fehler gefunden und Ihren Standpunkt gesehen, konnte aber meine Ablehnung nicht rückgängig machen.ObjectSummary:
Der ObjectSummary sind zwei Bezeichner zugeordnet:
boto3 S3: ObjectSummary
Weitere Informationen zu Objektschlüsseln aus der AWS S3-Dokumentation:
Hier ist ein Beispielcode, der zeigt, wie der Bucket-Name und der Objektschlüssel abgerufen werden.
Beispiel:
quelle
Ich habe es einfach so gemacht, einschließlich der Authentifizierungsmethode:
quelle
quelle
Mit nur geringen Änderungen am Code von @Hephaeastus in einem der obigen Kommentare wurde die folgende Methode geschrieben, um Ordner und Objekte (Dateien) in einem bestimmten Pfad aufzulisten. Funktioniert ähnlich wie der Befehl s3 ls.
Dadurch werden alle Objekte / Ordner in einem bestimmten Pfad aufgelistet. Ordnerpfad kann standardmäßig als Keine belassen werden, und die Methode listet den unmittelbaren Inhalt des Stammverzeichnisses des Buckets auf.
quelle
Hier ist die Lösung
importiere boto3
s3 = boto3.resource ('s3')
BUCKET_NAME = 'Ihr S3-Bucket-Name eg'deletemetesting11' '
allFiles = s3.Bucket (BUCKET_NAME) .objects.all ()
für Datei in allFiles: print (file.key)
quelle