#python #amazon-s3 #boto3
#python #amazon-s3 #boto3
Вопрос:
У меня есть словарь в объекте с именем «month_data», который содержит списки в виде значений.
{
'2000-01': [
{
'lat': 52.54,
'lon': 13.54,
'timestamp': '2000-01-01 01:00:00',
'temp': -0.57,
'feels_like': -2.64,
'humidity': 97,
'pressure': 1024
},
{
'lat': 52.54,
'lon': 13.54,
'timestamp': '2000-01-01 02:00:00',
'temp': -0.38,
'feels_like': -2.46,
'humidity': 97,
'pressure': 1024
}
],
'2000-02': [
{
'lat': 52.54,
'lon': 13.54,
'timestamp': '2000-01-01 01:00:00',
'temp': -0.57,
'feels_like': -2.64,
'humidity': 97,
'pressure': 1024
},
{
'lat': 52.54,
'lon': 13.54,
'timestamp': '2000-01-01 02:00:00',
'temp': -0.38,
'feels_like': -2.46,
'humidity': 97,
'pressure': 1024
}
]
}
Я хотел бы записать содержимое в отдельные файлы в корзине s3, но пока это не удается.
Ошибка:
ParamValidationError: Parameter validation failed:
Вот код:
for month, data in month_data.items():
s3.put_object(Bucket=s3_bucket, Body=data ,Key=f"{month}.json")
Есть у кого-нибудь идеи, почему это терпит неудачу?
Спасибо
A
Комментарии:
1. Выведите тип месяца и переменных данных и посмотрите, является ли это допустимым или приемлемым для передачи в функцию
put_object()
2.
Body
Входной аргумент должен быть байтом или доступным для поиска файлом, подобным объекту, обратитесь к документу boto3.
Ответ №1:
Похоже, вы пытаетесь сохранить данные в формате JSON, поэтому вам следует написать строку JSON, используя json.dumps
, следующим образом:
import boto3
import json
s3 = boto3.client("s3")
s3_bucket = "mybucket"
month_data = { ... }
for month, data in month_data.items():
s3.put_object(
Bucket=s3_bucket, Body=json.dumps(data), Key=f"{month}.json"
)
Комментарии:
1. спасибо @jarmod, что это было