Задача курса

Python: Организатор артефактов сборки

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «pathlib: безопасная работа с путями и файловой системой»

Условие

Организатор артефактов сборки

Ты пишешь скрипт, который организует артефакты сборки: читает исходные файлы из входной директории, распределяет их по поддиректориям выходной директории в зависимости от расширения и записывает манифест.

Что уже дано

Проверяющая система скрыто создаёт входную директорию dist/ с несколькими файлами. Все файлы и директории создаются до выполнения твоего кода в том же рабочем каталоге.

Доступные имена после скрытой подготовки: файловая система с директорией dist/, содержащей файлы app.py, utils.py, readme.txt, notes.txt, data.json.

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

Напиши верхнеуровневый скрипт, который использует pathlib.Path (без строковой конкатенации путей) и выполняет следующее:

  1. Создай директорию output/python/ и output/text/ через mkdir с нужными аргументами — даже если они уже существуют, ошибки быть не должно.
  2. Для каждого файла в dist/ (используй Path.iterdir()):
  • если расширение .py — прочитай содержимое через read_text(encoding='utf-8') и запиши его в output/python/<имя_файла> через write_text(encoding='utf-8');
  • если расширение .txt — прочитай содержимое и запиши в output/text/<имя_файла>;
  • файлы с другими расширениями игнорируй.
  1. Создай файл output/manifest.txt через write_text, записав в него строки вида <имя_файла> для каждого скопированного файла, по одному на строку, в алфавитном порядке имён файлов.

Ввод и вывод

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

Твой код читает файлы из директории dist/ и создаёт структуру output/ в рабочем каталоге. Проверяющая система после выполнения твоего кода читает созданные файлы и проверяет их содержимое.

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

print((Path("output") / "manifest.txt").read_text(encoding="utf-8"))

Результат:

app.py
notes.txt
readme.txt
utils.py

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

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