Добавить в корзинуПозвонить
Найти в Дзене

Python: от теории к делу — инструменты и решения. Выпуск 1 — файлы, папки и удобные инструменты

Говорят, что ленивый программист — хороший программист. Потому что он не делает руками то, что можно поручить коду. Python берёт на себя рутину, оставляя нам время для себя.
Всем привет! Это рубрика «Python: от теории к делу — инструменты и решения». Здесь мы рассматриваем реальные задачи и смотрим, как Python помогает с ними справиться. Сидите поудобнее — начинаем!
Системное: копируем и

Говорят, что ленивый программист — хороший программист. Потому что он не делает руками то, что можно поручить коду. Python берёт на себя рутину, оставляя нам время для себя.

Всем привет! Это рубрика «Python: от теории к делу — инструменты и решения». Здесь мы рассматриваем реальные задачи и смотрим, как Python помогает с ними справиться. Сидите поудобнее — начинаем!

Системное: копируем и архивируем одной командой — модуль shutil

Первый инструмент в нашем арсенале — модуль shutil.

Он встроен в Python и предоставляет готовые функции для высокоуровневой работы с файлами и папками. Ничего дополнительно устанавливать не нужно — просто импортируем и пользуемся.

-2

Одна строка — и у вас есть полная копия папки или готовый архив. Это незаменимая вещь для регулярного резервного копирования. Можно настроить запуск скрипта по расписанию и забыть о ручных бэкапах навсегда.

Где взять подробнее: документация по shutil доступна на docs.python.org.

Рутинная задача: массовое переименование файлов

Теперь — задача, с которой сталкивается почти каждый. У вас в папке лежат десятки или сотни файлов, и их нужно переименовать по определённому правилу. Делать это вручную — тратить часы. Python справляется за секунду.

Вот скрипт, который добавляет текущую дату к названиям всех текстовых файлов в указанной папке:

-3

Этот скрипт легко переделать под любую задачу. Заменить пробелы на подчёркивания? Поменять f"{today}_{filename}" на filename.replace(" ", "_"). Добавить порядковый номер? Ввести счётчик и включить его в новое имя. Убрать определённые слова из названий? Использовать filename.replace("удаляем_это", "").

Важно: перед запуском на реальных данных протестируйте скрипт на копии папки. os.rename() — операция необратимая.

Как подготовить папку для тренировки

Чтобы безопасно опробовать переименование, сначала создайте тестовую папку с файлами:

-4

Теперь у вас есть полигон для экспериментов. Запускайте скрипт переименования, проверяйте результат, меняйте правила — и ничего

ценного не пострадает.

Фишка Python: pathlib вместо os.path — работа с путями по-человечески

Долгое время стандартом для работы с файловыми путями был модуль os.path. Он надёжен, но синтаксис у него не самый удобный: os.path.join(), os.path.exists(), os.path.dirname() — всё это выглядит громоздко.

Начиная с Python 3.4 появился модуль pathlib, который предлагает объектно-ориентированный подход. Путь к файлу или папке становится объектом, с которым можно взаимодействовать. А операции выглядят интуитивно понятно.

-5

Чем 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:

-6

А вот как выглядит создание тестовой папки через pathlib:

-7

Согласитесь — код стал чище и понятнее.

Как не писать полные пути каждый раз

Вы наверняка заметили, что во всех примерах выше мы использовали абсолютные пути: C:\\бэкап\\отчёт.txt, C:\\документы и так далее. Это наглядно, но неудобно в реальной работе. Абсолютный путь может быть очень длинным. А если вы перенесёте проект в другую папку или на другой компьютер — все эти пути сломаются, и скрипт перестанет работать.

К счастью, часто достаточно указать путь относительно самого скрипта. pathlib позволяет делать это легко и элегантно:

-8

Переменная __file__ — это встроенная переменная Python, которая содержит путь к текущему исполняемому скрипту. .parent забирает папку, в которой этот скрипт лежит. А дальше мы просто добавляем нужное имя файла или папки через /.

Более надёжный вариант — использовать .resolve():

Path(__file__).resolve().parent

Метод .resolve() гарантирует, что вы получите абсолютный путь, даже если скрипт был запущен через ./script.py или через символическую ссылку (symlink). Для большинства повседневных задач достаточно и Path(__file__).parent, но о .resolve() полезно знать.

Ту же задачу можно решить и в старом стиле — через os.path:

-9

Однако мы стремимся к современным и удобным методам, поэтому рекомендуем использовать pathlib.

Что мы сегодня узнали:

  • 🖥 shutil — копирует, перемещает и архивирует файлы и папки в одну строку. Идеально для бэкапов.
  • 🏠 os.rename() + os.listdir() — позволяют переименовать сотни файлов за секунду по любому правилу.
  • 🐍 pathlib — современный способ работы с путями: читаемее и удобнее, чем os.path.
  • 🛤 Относительные пути через Path(__file__).parent избавляют от жёсткой привязки к абсолютным путям. Проект можно переносить куда угодно — всё будет работать.

Все инструменты из этого выпуска встроены в Python и не требуют установки дополнительных библиотек. Открывайте редактор и пробуйте.

Если что-то показалось непонятным — не переживайте. Модули — одна из

важнейших тем Python, и я планирую подробно разбирать их в отдельных

уроках. А задача этой рубрики — показать вам возможности языка, которые упрощают жизнь здесь и сейчас, за пределами веб-программирования и разработки десктопных приложений.

Не делайте руками то, что Python сделает за секунду. Берегите время для того, что действительно важно. А я продолжу делиться полезными

инструментами. Спасибо за внимание и до встречи в следующем выпуске.