Python: уроки, справочник и задачи

Python модуль os: обзор основных функций

Раздел: Работа с файлами в Python · Обновлено 31.10.2026

Python модуль os дает программе доступ к возможностям операционной системы: файлам и папкам, путям, переменным окружения, сведениям о процессе и системе. Ниже функции модуля разобраны по группам с примерами, показано, чем отличаются платформы, и объяснено, когда вместо os лучше взять pathlib, shutil или subprocess.

Python модуль os: обзор основных функций
Фото: Andries L Steenkamp / CC BY-SA 4.0, Wikimedia Commons
Содержание статьи
  1. Что входит в модуль os
  2. Файлы и папки
    1. Сведения о файле через os.stat
  3. Подмодуль os.path
  4. Переменные окружения
  5. Система, процесс и запуск команд
  6. Модуль os и соседние модули
  7. Частые вопросы
    1. Нужно ли устанавливать модуль os?
    2. Как узнать, в какой операционной системе запущен скрипт?
    3. Чем os.remove отличается от os.unlink?
    4. Как получить путь к папке, где лежит скрипт?

Что входит в модуль os

Модуль встроен в стандартную библиотеку и подключается строкой import os. Он скрывает различия между Windows, Linux и macOS: один и тот же вызов работает везде, а функции, которые есть только на одной платформе, помечены в документации как Unix или Windows.

Импортировать модуль лучше целиком, а не через from os import *. Иначе функция os.open() заменит встроенную open(), а работают они по-разному: первая возвращает числовой дескриптор, вторая файловый объект.

ГруппаОсновные функции
Каталогиgetcwd(), chdir(), listdir(), scandir(), mkdir(), makedirs(), rmdir(), walk()
Файлыremove(), rename(), replace(), stat(), chmod()
Путиподмодуль os.path: join(), exists(), splitext() и другие
Окружениеenviron, getenv(), putenv()
Система и процессname, sep, cpu_count(), getpid(), getlogin(), urandom()
Запуск командsystem(), startfile() (Windows)

Файлы и папки

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

import os

os.mkdir("test")                       # одна папка
os.makedirs("c:/catalog/test", exist_ok=True)  # цепочка папок
os.rename("c:/catalog/a.txt", "c:/catalog/b.txt")
os.remove("c:/catalog/b.txt")          # удалить файл
os.rmdir("test")                       # удалить пустую папку

os.rmdir() удаляет только пустую папку, для папки с содержимым есть shutil.rmtree(). Пошаговые сценарии со списком файлов, обходом дерева и копированием собраны в статье про управление каталогами и файлами.

Сведения о файле через os.stat

os.stat() возвращает объект с размером, временем изменения, правами и другими атрибутами файла. Время приходит в секундах от начала эпохи, его переводят в дату модулем datetime.

import os
from datetime import datetime

info = os.stat("main.py")
print(info.st_size)                               # размер в байтах
print(datetime.fromtimestamp(info.st_mtime))      # дата изменения

Подмодуль os.path

os.path работает с путями как со строками: склеивает, разбирает на части, проверяет существование. Он учитывает разделитель текущей системы, поэтому код с os.path.join() одинаково работает в Windows и Linux.

import os.path as p

path = p.join("data", "2024", "report.csv")
print(path)                 # data/2024/report.csv (в Windows data\2024\report.csv)
print(p.basename(path))     # report.csv
print(p.dirname(path))      # data/2024
print(p.splitext(path))     # ('data/2024/report', '.csv')
print(p.abspath("."))       # полный путь к текущей папке
print(p.expanduser("~"))    # домашняя папка пользователя

Для проверок есть exists(), isfile(), isdir() и getsize(). Классический пример: перед открытием файла проверить, что он существует.

import os

filename = input("Введите путь к файлу: ")
if os.path.isfile(filename):
    print("Файл найден, размер", os.path.getsize(filename), "байт")
else:
    print("Файл не существует")

В новом коде те же задачи короче решаются объектами Path: Path("data") / "report.csv". Сравнение двух подходов приведено в статье о pathlib.

Переменные окружения

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

import os

print(os.environ.get("HOME") or os.environ.get("USERPROFILE"))
debug = os.getenv("APP_DEBUG", "0") == "1"   # значение по умолчанию
os.environ["APP_MODE"] = "test"              # видно этому процессу и дочерним

Обращение os.environ["KEY"] к несуществующей переменной вызовет KeyError, поэтому для необязательных настроек используют get() или getenv(). Значения всегда строки: число или булево значение нужно преобразовать самостоятельно. Изменения в os.environ не сохраняются в системе после завершения программы.

Система, процесс и запуск команд

Несколько атрибутов и функций сообщают, где и как запущена программа. По ним выбирают поведение, зависящее от платформы.

import os

print(os.name)          # 'nt' в Windows, 'posix' в Linux и macOS
print(os.sep)           # разделитель пути: '\\' или '/'
print(os.linesep)       # перевод строки: '\r\n' или '\n'
print(os.cpu_count())   # число логических процессоров
print(os.getpid())      # идентификатор текущего процесса
token = os.urandom(16).hex()   # случайные байты для ключей

os.system("команда") запускает команду оболочки и возвращает код завершения, но не дает получить ее вывод. Для запуска внешних программ рекомендуется модуль subprocess: subprocess.run(["git", "status"], capture_output=True, text=True) возвращает и код, и текст вывода, а аргументы списком защищают от подстановки лишних команд.

Модуль os и соседние модули

Для части задач в стандартной библиотеке есть более удобные инструменты. Модуль os при этом остается основой: остальные построены поверх него.

ЗадачаМодуль osУдобнее
склеить и разобрать путьos.path.join()pathlib.Path
скопировать файл или папкунетshutil.copy2(), copytree()
удалить папку с содержимымнетshutil.rmtree()
найти файлы по маскеlistdir() + проверкаglob, Path.glob()
запустить программуos.system()subprocess.run()

Возможности копирования и архивации описаны в статье про shutil. Полный перечень функций os есть в официальной документации.

Частые вопросы

Короткие ответы на вопросы о модуле os.

Нужно ли устанавливать модуль os?

Нет, он входит в стандартную библиотеку Python и доступен сразу после установки интерпретатора. Команда pip install os не нужна.

Как узнать, в какой операционной системе запущен скрипт?

os.name различает только семейства nt и posix. Для точного ответа используйте sys.platform (win32, linux, darwin) или platform.system().

Ничем, это два имени одной функции. Обе удаляют файл и выбрасывают IsADirectoryError или PermissionError, если передать им папку.

Как получить путь к папке, где лежит скрипт?

os.path.dirname(os.path.abspath(__file__)). Текущий рабочий каталог из os.getcwd() может с ней не совпадать, если скрипт запущен из другой папки.