Быстрая навигация по статье
Хотите, чтобы ваши 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"). Это всё делает структурирование файлов быстрым и простым.
Простая и быстрая навигация по файлам и папкам
Надо пройтись по подкаталогу — не мучайтесь с длинными абсолютными путями. Проще временно "зайти" в нужную папку, сделать всё необходимое и вернуться назад. Такой скрипт будет универсальным — ему всё равно, где он запущен! В os для этого есть все нужные инструменты.
os.getcwd() показывает, где сейчас находится ваш скрипт.
os.chdir("logs") переносит "точку входа" в папку "logs", и теперь все действия происходят внутри неё. Хочется узнать, что там лежит? os.listdir(".") вам в помощь. Вернуться обратно — os.chdir("..").
Такой подход нужен, если работаете с динамически меняющимися папками и не хотите каждый раз писать километры путей.
Кроссплатформенная работа с путями — забудьте про ручную настройку
Был случай: делали проект вместе с другом — у меня Linux, а у него Windows. Каждая система пишет пути по-своему: где-то слеш, где-то обратный слеш. Мы долго мучились, пока не открыли для себя os.path — теперь наш код работает везде, и не надо править пути вручную.
Модуль сам разбирается с правильными разделителями и собирает пути как надо, избавляя от типичных ошибок. Вот такой простой пример:
Благодаря этим функциям ваш скрипт будет работать на любой платформе, и вы забудете про надоедливые опечатки с неправильными слешами.
Управляем доступом: делаем файлы только для чтения или запускаемыми
Бывало: скачали файл — а открыть его не получается? Или, наоборот, хотите, чтобы скрипт запускался, а текстовый файл никто не мог изменить? С помощью os можно в пару строк назначать файлам любые права.
Вот пример, как это сделать:
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). Всё просто:
Например, временные файлы проще стереть через rm (Linux/macOS) или del (Windows) — часто быстрее, чем настраивать отдельный Python-скрипт.
Будьте аккуратны: os.system() лучше использовать только для простых, неопасных команд и на своих машинах. Для сложных задач или пользовательского ввода всегда используйте subprocess — он безопаснее и гибче.
Всё о вашей системе — в пару строк кода!
Иногда нужно выяснить, где и под кем выполняется скрипт: имя пользователя, номер процесса и прочие детали. Модуль os знает всё необходимое.
Пара простых команд — и вы уже знаете всю важную информацию для логов, диагностики и адаптации поведения скрипта под разные системы.
Поиск по всем файлам и папкам за одну команду — мгновенно!
Хотите найти все .log-файлы в проекте, не заморачиваясь рекурсией? Используйте os и замечательную функцию os.walk() — она автоматически обходит все папки и подпапки.
os.walk(path) возвращает тройку (dirpath, dirnames, filenames) для каждой найденной папки, и чаще всего вы просто просматриваете filenames — ищете нужные файлы.
Это, пожалуй, самая мощная функция модуля os. Хотите найти все логи, пересчитать картинки или собрать файлы из вложенных каталогов? os.walk сделает всю работу за вас.
Python раскрывает невероятные возможности для автоматизации — с такими модулями любые задачи превращаются в удовольствие.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru