2017-07-03 1 views
0

Ich boto3, um Dateien von s3 zum Download, und ich versuche, die Werte von bucket.objects.all() Iteration auspacken:Auspacken s3.ObjectSummary von bucket.objects.all() Iteration

bucket = boto3.Session(profile_name='default').resource('s3').Bucket(bucket_name) 
for (bucket_name, key) in zip(bucket.objects.all()): 
    print(bucket_name, key) 

Aber diese zurückkehrt den folgenden Fehler:

ValueError: not enough values to unpack (expected 2, got 1) 

Was falsch ich tue?

+0

Überprüfen Sie den Wert von 'zip (bucket.objects.all())' genau, wenn Sie keine Liste von Tupeln mit zwei Mitgliedern haben, können Sie diese Syntax nicht in einer for-Schleife verwenden – PRMoureu

+0

Der Wert ist : (s3.ObjectSummary (bucket_name = 'einige-bucket', key = 'RE.xlsx'),) –

+0

Damit Sie nur 1 Objekt haben, müssen Sie die Attribute dieses Objekts vor dem Entpacken extrahieren, um mit 'bucket_name' übereinzustimmen und 'Schlüssel' – PRMoureu

Antwort

0

Sie können diesen Teil versuchen statt zip(bucket.objects.all()):

map(lambda x: (x.bucket_name, x.key), bucket.objects.all()) 

die Funktion map ermöglichen die Funktion Lambda (erster Parameter) zu jedem Mitglied des zweiten Parameters bucket.objects.all(), das eine Liste von ObjectSummary kehrt anzuwenden.

map gibt eine Liste können Sie Schleife

Die Lambda liefert ein Tupel von zwei Werten, so dass Sie sie auspacken.