Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unpacking s3.ObjectSummary from bucket.objects.all() iteration

I'm using boto3 to download files from s3, and i'm trying to unpack the values from 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)

But this is returning the following error:

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

What I'm doing wrongly?


1 Answers

You can try this part instead of zip(bucket.objects.all()):

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

the function map allows to apply the function lambda (first parameter) to each members of the second parameter bucket.objects.all() which returns a list of ObjectSummary.

map returns a list you can loop

The lambda returns a tuple of 2 values so that you can unpack them.

like image 187
PRMoureu Avatar answered May 27 '26 09:05

PRMoureu



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!