Урок 53. Практикум 13

📁 Блок: Python Fundamentals / Файлы и практика ⏱️ Время изучения: ~120 мин 🎯 Сложность: Средняя
#join #makedirs #defaultdict #sorted #lambda #open #with #as #append #if #not #in #readlines #strip #split #len #int #write #print #remove #import #from #def #for #return #items #dict #dirname #read #sum #values #exit #reader #continue #add #del

⚡ Кратко: суть урока

В этом практикуме вы напишете полноценную консольную утилиту sales_report.py, которая читает файл продаж, группирует данные по годам и месяцам и создаёт отчёты по категориям.

Программа принимает пути через аргументы командной строки sys.argv, использует os.makedirs для создания вложенных папок и defaultdict для удобной группировки.

Главный результат — папка reports/ с подпапками YYYY/MM/, в каждой из которых лежат monthly_report.txt и файлы по категориям, отсортированные по дате.

Ключевые конструкции: sys.argv, os.path.join, os.makedirs(exist_ok=True), defaultdict, sorted(..., key=lambda x: x["date"]), менеджер контекста with open.

Минимальный пример: запустить python sales_report.py data/sales_data.txt reports и получить структуру отчётов.

Топ-3 ошибки: забыть проверить количество аргументов sys.argv, не использовать exist_ok=True при создании папок, писать пути через "\\" вместо os.path.join.

О чём этот урок

Урок 53 — это большая практическая работа, объединяющая темы, пройденные ранее в курсе: работу с файлами, строками, словарями, модулями стандартной библиотеки и аргументами командной строки.

Вы создадите программу для анализа продаж. Она читает текстовый файл с записями формата имя,дата,сумма,категория,город, группирует записи по году, месяцу и категории, а затем генерирует структуру отчётов на диске.

Этот сценарий близок к реальным задачам обработки данных: ETL-скрипты, подготовка отчётности, агрегация CSV-файлов.

Цели

  • Читать аргументы командной строки через sys.argv и проверять их количество.
  • Читать текстовый файл построчно и разбирать строки по разделителю ,.
  • Преобразовывать строковые данные в числа и даты.
  • Группировать данные с помощью defaultdict из модуля collections.
  • Создавать вложенные директории через os.makedirs(exist_ok=True).
  • Сортировать записи по дате с помощью sorted и lambda.
  • Формировать текстовые отчёты и записывать их в файлы с кодировкой utf-8.

Что повторить заранее

🎯 Что изучать дальше