Computer >> Máy Tính >  >> Lập trình >> Python

Tải xuống các đối tượng S3 bằng Python và Boto 3

Trong bài đăng này, chúng tôi đưa ra các ví dụ về cách tải xuống tệp và hình ảnh từ bộ chứa aws S3 bằng cách sử dụng thư viện Python và Boto 3.

Boto là một AWS SDK cho Python. Nó cung cấp các chức năng dễ sử dụng có thể tương tác với các dịch vụ AWS như nhóm EC2 và S3.

Tải xuống đối tượng S3 bằng Python và Boto 3

Trong ví dụ sau, chúng tôi tải xuống một tệp từ một nhóm S3 đã chỉ định.

Đầu tiên, chúng ta phải tạo một ứng dụng khách S3 bằng 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 phương thức nhận ba tham số:

Tham số đầu tiên là tên thùng trong S3. Tham số thứ hai là tệp (tên và phần mở rộng) mà chúng ta muốn tải xuống và tham số thứ ba là tên của tệp chúng ta muốn lưu dưới dạng.

Tải xuống tất cả các đối tượng S3 trong một nhóm được chỉ định

Trong ví dụ sau, chúng tôi tải xuống tất cả các đối tượng trong một nhóm S3 đã chỉ định.

Đoạn mã giả định rằng các tệp nằm ngay trong thư mục gốc của nhóm và không nằm trong thư mục con.

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)

Tải xuống tất cả các đối tượng trong một nhóm phụ S3

Đoạn mã sau cho biết cách tải xuống các tệp nằm trong thư mục con trong nhóm S3.

Giả sử các tệp nằm trong nhóm và vị trí sau:

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)

Tài liệu tham khảo

Tài liệu Boto 3