Задача курса

Чтение JSON и запись CSV в Python: задача на конвертер

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «JSON и CSV: загрузка, проверка и сохранение структурированных данных»

Условие

Конвертер отчётов: JSON → валидация → CSV

Что уже дано

Проверяющая система скрыто создаёт файл products.json до запуска твоего кода. Файл содержит список товаров в формате JSON. Часть записей намеренно некорректна.

Доступные имена в пространстве имён после start_code: ничего — только файл products.json на диске.

Что нужно сделать

Реализуй три функции и вызови их на верхнем уровне:

  1. load_products(path) — принимает строку-путь к JSON-файлу, открывает его с encoding='utf-8' и возвращает list[dict]. Не выполняет никакой валидации.

  2. validate_product(record) — принимает dict и проверяет:

  • наличие обязательных ключей "name", "price", "quantity";
  • "name" — тип str;
  • "price" — тип float (не int);
  • "quantity" — тип int.

При любом нарушении поднимает ValueError с понятным сообщением. Если запись корректна — возвращает её без изменений.

  1. save_valid_products(path, records) — принимает строку-путь и список корректных словарей; сохраняет их в CSV-файл с заголовком и колонками в порядке name, price, quantity. Открывает файл с newline='' и encoding='utf-8'.

На верхнем уровне скрипта:

  • загрузи данные из "products.json" через load_products;
  • пройди по каждой записи: если validate_product поднимает ValueError, пропусти запись (не добавляй в результат);
  • сохрани прошедшие валидацию записи в "valid_products.csv" через save_valid_products;
  • сохрани список прошедших записей в переменную valid (тип list[dict]).

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно.

Проверяющая система после выполнения твоего кода:

  • читает файл valid_products.csv и проверяет его содержимое;
  • обращается к переменной valid в глобальном пространстве имён;
  • вызывает validate_product напрямую с тестовыми данными;
  • вызывает load_products с подготовленным файлом;
  • вызывает save_valid_products с временным путём.

Пример использования

print(len(valid))
print(Path("valid_products.csv").read_text(encoding="utf-8").strip())

Результат:

2
name,price,quantity
Ноутбук,59999.0,3
Мышь,799.0,15

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется