Λήψη αντικειμένων S3 με Python και Boto 3

Σε αυτήν την ανάρτηση παρουσιάζουμε παραδείγματα για τον τρόπο λήψης αρχείων και εικόνων από έναν κάδο aws S3 χρησιμοποιώντας τη βιβλιοθήκη Python και Boto 3.

Το Boto είναι ένα SDK AWS για την Python. Παρέχει εύχρηστες λειτουργίες που μπορούν να αλληλεπιδράσουν με υπηρεσίες AWS όπως κάδους EC2 και S3.



Dowload S3 Αντικείμενα με Python και Boto 3

Στο ακόλουθο παράδειγμα, κατεβάζουμε ένα αρχείο από έναν καθορισμένο κάδο S3.


Πρώτα πρέπει να δημιουργήσουμε έναν πελάτη S3 χρησιμοποιώντας το boto3.client(s3).

import boto3 BUCKET_NAME = 'my_s3_bucket' BUCKET_FILE_NAME = 'my_file.json' LOCAL_FILE_NAME = 'downloaded.json' def download_s3_file():
s3 = boto3.client('s3')
s3.download_file(BUCKET_NAME, BUCKET_FILE_NAME, LOCAL_FILE_NAME)

Το download_file Η μέθοδος διαρκεί τρεις παραμέτρους:


Η πρώτη παράμετρος είναι το όνομα κάδου στο S3. Το δεύτερο είναι το αρχείο (όνομα και επέκταση) που θέλουμε να κατεβάσουμε και η τρίτη παράμετρος είναι το όνομα του αρχείου που θέλουμε να αποθηκεύσουμε ως.



Λήψη όλων των αντικειμένων S3 σε έναν καθορισμένο κάδο

Στο παρακάτω παράδειγμα, κατεβάζουμε όλα τα αντικείμενα σε έναν καθορισμένο κάδο S3.

Το απόσπασμα κώδικα υποθέτει ότι τα αρχεία βρίσκονται απευθείας στη ρίζα του κάδου και όχι σε έναν υποφάκελο.

import boto3 def download_all_files():
#initiate s3 resource
s3 = boto3.resource('s3')
# select bucket
my_bucket = s3.Bucket('bucket_name')
# download file into current directory
for s3_object in my_bucket.objects.all():
filename = s3_object.key
my_bucket.download_file(s3_object.key, filename)


Λήψη όλων των αντικειμένων σε κάδο υποφακέλων S3

Ο παρακάτω κώδικας δείχνει τον τρόπο λήψης αρχείων που βρίσκονται σε έναν υποφάκελο σε έναν κάδο S3.


Ας υποθέσουμε ότι τα αρχεία βρίσκονται στον ακόλουθο κάδο και τοποθεσία:

BUCKET_NAME = 'images'

PATH = pets/cats/

import boto3 import os def download_all_objects_in_folder():
s3_resource = boto3.resource('s3')
my_bucket = s3_resource.Bucket('images')
objects = my_bucket.objects.filter(Prefix='pets/cats/')
for obj in objects:
path, filename = os.path.split(obj.key)
my_bucket.download_file(obj.key, filename)

βιβλιογραφικές αναφορές

Τεκμηρίωση Boto 3


Ενδιαφέροντα Άρθρα