Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

(1) If you aren't connecting to EUMETSAT buckets, or a bucket someone shared with you, you can probably skip this part. Now, if the bucket is located at another project (e.g. someone is sharing their bucket with you), you probably need to denote the bucket name with project_id:bucketname. For boto3 to be able to use that kind of naming convention, we need to use a small trick. 

Code Block
languagepy
 #This is a neat trick that allows us to specify our bucket name in terms of ProjectID:bucketname
bucketname = project_id + ':' + bucketname
botocore_session = Session()
botocore_session.unregister('before-parameter-build.s3', validate_bucket_name)
boto3.setup_default_session(botocore_session = botocore_session)

Now lets start by initializing the S3 client with our access keys and endpoint:

Code Block
languagepy
#Initialize the S3 client
s3 = boto3.client('s3', endpoint_url=endpoint,
        aws_access_key_id = access_key,
        aws_secret_access_key = secret_access_key)

As a first step, and to confirm we have successfully connected, lets list the objects inside our bucket (up to a 1.000 objects). 

Code Block
languagepy
#List the objects in our bucket
response = s3.list_objects(Bucket=bucketname)
for item in response['Contents']:
    print(item['Key'])

Now lets try to read a file from a bucket into Python's memory, so we can work with it inside Python without ever saving the file on our local computer:

Code Block
languagepy
#Read a file into Python's memory and open it as a string
filename = '/folder1/folder2/myfile.txt'  #Fill this in  
obj = s3.get_object(Bucket=bucketname, Key=filename)
myObject = obj['Body'].read().decode('utf-8') 
print(myObject)

But if you'd want to download the file instead of reading it into memory, here's how you'd do that:

Code Block
languagepy
 #Downloading a file from the bucket
with open('myfile', 'wb') as f:  #Fill this in  
    s3.download_fileobj(bucketname, 'myfile.txt', f) 

And similarly you can upload files to the bucket (given that you have write access to the bucket):

Code Block
languagepy
#Uploading a file to the bucket (make sure you have write access)
response = s3.upload_file('myfile', bucketname, 'myfile')  #Fill this in  

...