/
mackfly
/
culinary
Обзор
Документация
Войти
/
mackfly
/
culinary
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
culinary.py
90 строк
3 KB
mackfly
create: culinary.py, text.txt
03 май 2026, 17:14
Верифицирован
03 май 2026, 17:14
7fe94f1
Код
Авторство
О чём код?
import os import json from typing import Dict, List, Union # Алиасы типов для лучшей читаемости Ingredient = Dict[str, Union[str, int, float]] CookBook = Dict[str, List[Ingredient]] def _parse_ingredient_line(line: str) -> Ingredient: """ Разбирает строку ингредиента формата 'Название | Количество | Единица' и возвращает словарь с нужной структурой. """ parts = [part.strip() for part in line.split('|')] if len(parts) != 3: raise ValueError(f"Некорректный формат строки ингредиента: '{line}'") # Пытаемся привести количество к int, если не получается — к float try: quantity = int(parts[1]) except ValueError: quantity = float(parts[1]) return { 'ingredient_name': parts[0], 'quantity': quantity, 'measure': parts[2] } def load_recipes(file_path: str) -> CookBook: """ Читает файл с рецептами, парсит его построчно и возвращает словарь cook_book в требуемом формате. """ cook_book: CookBook = {} with open(file_path, 'r', encoding='utf-8') as file: # Убираем символы перевода строки и лишние пробелы по краям lines = [line.strip() for line in file] idx = 0 while idx < len(lines): dish_name = lines[idx] # Пропускаем пустые строки (разделители между рецептами) if not dish_name: idx += 1 continue idx += 1 if idx >= len(lines): break # Читаем количество ингредиентов try: ingredient_count = int(lines[idx]) except ValueError: # Если вместо числа встретился текст, пропускаем строку и идем дальше idx += 1 continue idx += 1 # Считываем указанное количество строк с ингредиентами ingredients: List[Ingredient] = [] for _ in range(ingredient_count): if idx < len(lines) and lines[idx]: ingredients.append(_parse_ingredient_line(lines[idx])) idx += 1 cook_book[dish_name] = ingredients return cook_book if __name__ == '__main__': FILE_PATH = 'text.txt' # Проверка наличия файла перед запуском if not os.path.exists(FILE_PATH): print(f"⚠️ Файл '{FILE_PATH}' не найден. Создайте его перед запуском.") else: try: result_cook_book = load_recipes(FILE_PATH) # Красивый вывод результата для проверки print(json.dumps(result_cook_book, ensure_ascii=False, indent=2)) except Exception as e: print(f"❌ Произошла ошибка при чтении файла: {e}")