ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Сохранение данных в объект S3 с помощью метода boto3

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для сохранения данных в S3 используя boto3, в первую очередь, убедитесь, что учетные данные AWS настроены правильно:

Python
Скопировать код
import boto3
s3 = boto3.client('s3')
s3.put_object(Bucket='my-bucket', Key='example.txt', Body='Hello, World!')

Этот код сохранит строку 'Hello, World!' в файл 'example.txt'. Чтобы сохранить файл, замените Body='Hello, World!' на Body=open('file.txt', 'rb').

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Простая загрузка файла

Для эффективной загрузки больших файлов воспользуйтесь методом upload_file():

Python
Скопировать код
import boto3
s3 = boto3.resource('s3')
s3.Bucket('my-bucket').upload_file('path/to/local/file.txt', 'file.txt')

Убедитесь, что пути к файлам указаны правильно!

Работа с JSON

Чтобы преобразовать объекты Python в JSON, используйте json.dumps():

Python
Скопировать код
import json
import boto3
s3 = boto3.resource('s3')
data = {'hello': 'world'}
s3.Object('my-bucket', 'data.json').put(Body=json.dumps(data))

А для возврата данных из JSON в Python объект:

Python
Скопировать код
json_content = s3.Object('my-bucket', 'data.json').get()['Body'].read().decode('utf-8')
data = json.loads(json_content)

Безопасность учетных данных

Для обеспечения безопасности данных не встраивайте учетные данные AWS напрямую в код. Храните их в файле .aws/credentials или в переменных окружения.

Визуализация

Передача данных в S3 с помощью boto3 похожа на отправку письма:

Markdown
Скопировать код
Выполняем отправку данных в S3:
1. Подготавливаем 'письмо' (data)
2. Указываем адресату (bucket)
3. Отправляем письмо с помощью вызова метода (`s3.put_object`)
Python
Скопировать код
import boto3
data = 'Hello, S3!'
bucket = "s3_bucket_for_letters"
object_key = "a_letter_for_s3.txt"
s3 = boto3.client('s3')
s3.put_object(Bucket=bucket, Key=object_key, Body=data)

И вот ваши данные были успешно отправлены в S3!

Хранение бинарных данных

Для сохранения бинарных данных, например, изображений или видео, открывайте файлы в режиме 'rb':

Python
Скопировать код
s3.put_object(Bucket='my-bucket', Key='image.jpg', Body=open('path/to/me_smiling_with_bucket.jpg', 'rb'))

Использование lambda-функции для работы с JSON

Для упрощения работы с данными в формате JSON возможно использовать lambda-функции:

Python
Скопировать код
json_dump_s3 = lambda obj, bucket, key: s3.Object(bucket, key).put(Body=json.dumps(obj))
json_load_s3 = lambda bucket, key: json.loads(s3.Object(bucket, key).get()['Body'].read().decode('utf-8'))

json_dump_s3({'hello': 'world'}, 'my-bucket', 'data.json')
data = json_load_s3('my-bucket', 'data.json')

Обработка ошибок

Используйте обработку исключений для готовности к непредвиденным ситуациям:

Python
Скопировать код
from botocore.exceptions import NoCredentialsError, PartialUploadError

try:
    s3.upload_file('file.txt', 'my-bucket', 'file.txt')
except NoCredentialsError:
    print('Учетные данные недоступны, пожалуйста, проверьте их и попробуйте заново')
except PartialUploadError:
    print('Неполная загрузка: возможно, есть проблема с размером файла или сетевым подключением')

Полезные материалы

  1. Boto3 Документация – S3 Сервис
  2. Boto3 S3.Client.put_object – API Справочник
  3. Stack Overflow – Как использовать boto3 для загрузки файла в S3
  4. Многопоточная загрузка в Boto3 S3
  5. Установка Boto3 – Python Package Index (PyPI)