Запись содержимого словаря в файлы с ключами в качестве имени файла

#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, что это было