Говорят, что ленивый программист — хороший программист. Потому что он не делает руками то, что можно поручить коду. Python берёт на себя рутину, оставляя нам время для себя.
Всем привет! Это рубрика «Python: от теории к делу — инструменты и решения». Здесь мы рассматриваем реальные задачи и смотрим, как Python помогает с ними справиться. Сидите поудобнее — начинаем!
Системное: копируем и архивируем одной командой — модуль shutil
Первый инструмент в нашем арсенале — модуль shutil.
Он встроен в Python и предоставляет готовые функции для высокоуровневой работы с файлами и папками. Ничего дополнительно устанавливать не нужно — просто импортируем и пользуемся.
Одна строка — и у вас есть полная копия папки или готовый архив. Это незаменимая вещь для регулярного резервного копирования. Можно настроить запуск скрипта по расписанию и забыть о ручных бэкапах навсегда.
Где взять подробнее: документация по shutil доступна на docs.python.org.
Рутинная задача: массовое переименование файлов
Теперь — задача, с которой сталкивается почти каждый. У вас в папке лежат десятки или сотни файлов, и их нужно переименовать по определённому правилу. Делать это вручную — тратить часы. Python справляется за секунду.
Вот скрипт, который добавляет текущую дату к названиям всех текстовых файлов в указанной папке:
Этот скрипт легко переделать под любую задачу. Заменить пробелы на подчёркивания? Поменять f"{today}_{filename}" на filename.replace(" ", "_"). Добавить порядковый номер? Ввести счётчик и включить его в новое имя. Убрать определённые слова из названий? Использовать filename.replace("удаляем_это", "").
Важно: перед запуском на реальных данных протестируйте скрипт на копии папки. os.rename() — операция необратимая.
Как подготовить папку для тренировки
Чтобы безопасно опробовать переименование, сначала создайте тестовую папку с файлами:
Теперь у вас есть полигон для экспериментов. Запускайте скрипт переименования, проверяйте результат, меняйте правила — и ничего
ценного не пострадает.
Фишка Python: pathlib вместо os.path — работа с путями по-человечески
Долгое время стандартом для работы с файловыми путями был модуль os.path. Он надёжен, но синтаксис у него не самый удобный: os.path.join(), os.path.exists(), os.path.dirname() — всё это выглядит громоздко.
Начиная с Python 3.4 появился модуль pathlib, который предлагает объектно-ориентированный подход. Путь к файлу или папке становится объектом, с которым можно взаимодействовать. А операции выглядят интуитивно понятно.
Чем pathlib лучше os.path:
- Вместо os.path.join(a, b) — просто a / b (оператор / переопределён для объектов Path).
- Вместо os.path.exists(path) — path.exists().
- Вместо os.path.basename(path) — path.name.
- Метод glob() позволяет искать файлы по шаблону в одну строку.
Код с pathlib читается почти как обычный текст. Это как пересесть с еханической коробки передач на автомат — сначала непривычно, а потом не хочется возвращаться.
Где взять подробнее: документация по pathlib — docs.python.org.
Переписываем наши примеры на pathlib
Теперь скрипт переименования файлов, который мы указали в разделе рутинных задач, можем переписать так с использованием pathlib:
А вот как выглядит создание тестовой папки через pathlib:
Согласитесь — код стал чище и понятнее.
Как не писать полные пути каждый раз
Вы наверняка заметили, что во всех примерах выше мы использовали абсолютные пути: C:\\бэкап\\отчёт.txt, C:\\документы и так далее. Это наглядно, но неудобно в реальной работе. Абсолютный путь может быть очень длинным. А если вы перенесёте проект в другую папку или на другой компьютер — все эти пути сломаются, и скрипт перестанет работать.
К счастью, часто достаточно указать путь относительно самого скрипта. pathlib позволяет делать это легко и элегантно:
Переменная __file__ — это встроенная переменная Python, которая содержит путь к текущему исполняемому скрипту. .parent забирает папку, в которой этот скрипт лежит. А дальше мы просто добавляем нужное имя файла или папки через /.
Более надёжный вариант — использовать .resolve():
Path(__file__).resolve().parent
Метод .resolve() гарантирует, что вы получите абсолютный путь, даже если скрипт был запущен через ./script.py или через символическую ссылку (symlink). Для большинства повседневных задач достаточно и Path(__file__).parent, но о .resolve() полезно знать.
Ту же задачу можно решить и в старом стиле — через os.path:
Однако мы стремимся к современным и удобным методам, поэтому рекомендуем использовать pathlib.
Что мы сегодня узнали:
- 🖥 shutil — копирует, перемещает и архивирует файлы и папки в одну строку. Идеально для бэкапов.
- 🏠 os.rename() + os.listdir() — позволяют переименовать сотни файлов за секунду по любому правилу.
- 🐍 pathlib — современный способ работы с путями: читаемее и удобнее, чем os.path.
- 🛤 Относительные пути через Path(__file__).parent избавляют от жёсткой привязки к абсолютным путям. Проект можно переносить куда угодно — всё будет работать.
Все инструменты из этого выпуска встроены в Python и не требуют установки дополнительных библиотек. Открывайте редактор и пробуйте.
Если что-то показалось непонятным — не переживайте. Модули — одна из
важнейших тем Python, и я планирую подробно разбирать их в отдельных
уроках. А задача этой рубрики — показать вам возможности языка, которые упрощают жизнь здесь и сейчас, за пределами веб-программирования и разработки десктопных приложений.
Не делайте руками то, что Python сделает за секунду. Берегите время для того, что действительно важно. А я продолжу делиться полезными
инструментами. Спасибо за внимание и до встречи в следующем выпуске.