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

8 безумно полезных трюков с модулем os в Python — узнаете, почему вы зря делали всё вручную!

Хотите, чтобы ваши Python-скрипты одинаково легко работали на всех платформах? Модуль os — настоящий универсальный инструмент для работы с операционной системой, ваш личный швейцарский нож программиста. Давайте посмотрим на его самые полезные возможности. Знакома ситуация: скачали кучу файлов из интернета, а потом сортируете их вручную — PDF сюда, картинки туда, текстовые документы отдельно. Мучение, правда? Но ведь можно всё автоматизировать: Python и функции модуля os за пару строк сами разберутся, куда что складывать. С помощью os.path.exists("pdfs") вы проверяете, нет ли уже такой папки, а os.mkdir() создаёт её только если нужно. os.makedirs(..., exist_ok=True) может создать целую цепочку вложенных папок за один раз, а параметр exist_ok=True защитит от ошибок, если папка уже существует. Посмотреть, что внутри директории — легко: os.listdir(".") покажет всё содержимое текущей папки. А чтобы удалить пустую папку — используйте os.rmdir("old_folder"). Это всё делает структурирование ф
Оглавление

Быстрая навигация по статье

Хотите, чтобы ваши Python-скрипты одинаково легко работали на всех платформах? Модуль os — настоящий универсальный инструмент для работы с операционной системой, ваш личный швейцарский нож программиста. Давайте посмотрим на его самые полезные возможности.

Автоматизация работы с папками и файлами

Знакома ситуация: скачали кучу файлов из интернета, а потом сортируете их вручную — PDF сюда, картинки туда, текстовые документы отдельно. Мучение, правда? Но ведь можно всё автоматизировать: Python и функции модуля os за пару строк сами разберутся, куда что складывать.

-2

С помощью os.path.exists("pdfs") вы проверяете, нет ли уже такой папки, а os.mkdir() создаёт её только если нужно. os.makedirs(..., exist_ok=True) может создать целую цепочку вложенных папок за один раз, а параметр exist_ok=True защитит от ошибок, если папка уже существует. Посмотреть, что внутри директории — легко: os.listdir(".") покажет всё содержимое текущей папки. А чтобы удалить пустую папку — используйте os.rmdir("old_folder"). Это всё делает структурирование файлов быстрым и простым.

Простая и быстрая навигация по файлам и папкам

Надо пройтись по подкаталогу — не мучайтесь с длинными абсолютными путями. Проще временно "зайти" в нужную папку, сделать всё необходимое и вернуться назад. Такой скрипт будет универсальным — ему всё равно, где он запущен! В os для этого есть все нужные инструменты.

-3

os.getcwd() показывает, где сейчас находится ваш скрипт.
os.chdir("logs") переносит "точку входа" в папку "logs", и теперь все действия происходят внутри неё. Хочется узнать, что там лежит? os.listdir(".") вам в помощь. Вернуться обратно — os.chdir("..").

Такой подход нужен, если работаете с динамически меняющимися папками и не хотите каждый раз писать километры путей.

Кроссплатформенная работа с путями — забудьте про ручную настройку

Был случай: делали проект вместе с другом — у меня Linux, а у него Windows. Каждая система пишет пути по-своему: где-то слеш, где-то обратный слеш. Мы долго мучились, пока не открыли для себя os.path — теперь наш код работает везде, и не надо править пути вручную.

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

-4

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

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

Бывало: скачали файл — а открыть его не получается? Или, наоборот, хотите, чтобы скрипт запускался, а текстовый файл никто не мог изменить? С помощью os можно в пару строк назначать файлам любые права.

Вот пример, как это сделать:

-5

os.access(file_path, os.R_OK) подскажет, можно ли читать файл, а os.access(file_path, os.W_OK) — не запрещена ли запись. Сделать файл только для чтения — os.chmod(file_path, stat.S_IREAD). В stat хранятся простые константы (S_IREAD, S_IWRITE, S_IEXEC): комбинируйте их через | — например, stat.S_IREAD | stat.S_IEXEC.

Этот инструмент незаменим, если хочется держать важные данные под контролем и быть уверенным в их безопасности.

Переменные окружения: шифруем пароли и ключи правильно

Допустим, вы получили API-ключ или пароль, нужен для работы с сервисом. Вшивать его в код — плохая идея! Лучше держать секреты в переменных окружения и забирать их только при запуске программы. Это и безопасно, и меняется в один миг.

os.getenv("API_KEY") достаёт значение переменной окружения API_KEY. Нет такой переменной — получите None или то, что укажете по умолчанию. Можно создать новую переменную только на время работы программы с помощью os.environ["MODE"] = "development". Это суперудобно для тестирования разных настроек без переписывания кода.

Такой подход отлично защищает ваши секреты и делает приложение гибким в настройках.

Зачем изобретать велосипед: запускаем любые системные команды из Python

Вдруг не хватает нужной функции, или проще отдать задачу системе? Вывести дату, очистить рабочий стол или вызвать внешнюю программу — через os можно запустить любую команду с помощью os.system(command). Всё просто:

-6

Например, временные файлы проще стереть через rm (Linux/macOS) или del (Windows) — часто быстрее, чем настраивать отдельный Python-скрипт.

Будьте аккуратны: os.system() лучше использовать только для простых, неопасных команд и на своих машинах. Для сложных задач или пользовательского ввода всегда используйте subprocess — он безопаснее и гибче.

Всё о вашей системе — в пару строк кода!

Иногда нужно выяснить, где и под кем выполняется скрипт: имя пользователя, номер процесса и прочие детали. Модуль os знает всё необходимое.

-7

Пара простых команд — и вы уже знаете всю важную информацию для логов, диагностики и адаптации поведения скрипта под разные системы.

Поиск по всем файлам и папкам за одну команду — мгновенно!

Хотите найти все .log-файлы в проекте, не заморачиваясь рекурсией? Используйте os и замечательную функцию os.walk() — она автоматически обходит все папки и подпапки.

os.walk(path) возвращает тройку (dirpath, dirnames, filenames) для каждой найденной папки, и чаще всего вы просто просматриваете filenames — ищете нужные файлы.

-8

Это, пожалуй, самая мощная функция модуля os. Хотите найти все логи, пересчитать картинки или собрать файлы из вложенных каталогов? os.walk сделает всю работу за вас.

Python раскрывает невероятные возможности для автоматизации — с такими модулями любые задачи превращаются в удовольствие.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

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

Также подписывайтесь на нас в: