Задача курса
Чтение JSON и запись CSV в Python: задача на конвертер
Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «JSON и CSV: загрузка, проверка и сохранение структурированных данных»
Условие
Конвертер отчётов: JSON → валидация → CSV
Что уже дано
Проверяющая система скрыто создаёт файл products.json до запуска твоего кода. Файл содержит список товаров в формате JSON. Часть записей намеренно некорректна.
Доступные имена в пространстве имён после start_code: ничего — только файл products.json на диске.
Что нужно сделать
Реализуй три функции и вызови их на верхнем уровне:
load_products(path)— принимает строку-путь к JSON-файлу, открывает его сencoding='utf-8'и возвращаетlist[dict]. Не выполняет никакой валидации.validate_product(record)— принимаетdictи проверяет:
- наличие обязательных ключей
"name","price","quantity"; "name"— типstr;"price"— типfloat(неint);"quantity"— типint.
При любом нарушении поднимает ValueError с понятным сообщением. Если запись корректна — возвращает её без изменений.
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
