am trying to scroll over all buckets in s3 and see if there is a prefix that matches and get into those folders and read the json files.
I have tried to get the folders that contain a prefix, but failing to enter them.
Code:
import boto3
bucket = ['test-eob', 'test-eob-images']
client = boto3.client('s3')
for i in bucket:
result = client.list_objects(Bucket=i,Prefix = 'PROCESSED_BY/FILE_JSON', Delimiter='/')
print(result)
Using this am getting the ones with prefix and fails when bucket doesnt have that prefix.
structure of test-eob
, test-eob/PROCESSED_BY/FILE_JSON/*.json
I have to read the json if only my prefix matches, else come out of the bucket.
Can anyone help me out here.
Amazon S3 is the only object storage service that allows you to block public access to all of your objects at the bucket or the account level, now and in the future by using S3 Block Public Access. To ensure that public access to all your S3 buckets and objects is blocked, turn on block all public access.
The total volume of data and number of objects you can store are unlimited. Also the documentation states there is no performance difference between using a single bucket or multiple buckets so I guess both option 1 and 2 would be suitable for you.
Try to catch the error(is it a KeyError
?) when the bucket does not contain the prefix.
For example:
for i in bucket:
try:
result = client.list_objects(Bucket=i,Prefix = 'PROCESSED_BY/FILE_JSON', Delimiter='/')
print(result)
except KeyError:
pass
To read the json, there are several ways. For example with json.loads()
from the json module.
So for each object in the bucket:
content_object = s3.Object(bucket_name, file_name)
file_content = content_object.get()['Body'].read().decode('utf-8')
json_content = json.loads(file_content)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With