> **Источник:** https://python-all.ru/3.0/library/os.path.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `os.path` – Обработка путей к файлам

Этот модуль реализует несколько полезных функций для работы с путями. Для чтения и записи файлов см. [`open()`](https://python-all.ru/3.0/library/functions.html#open), а для доступа к файловой системе – модуль [`os`](https://python-all.ru/3.0/library/os.html#module-os). Параметры пути могут быть строками или байтами. Приложениям рекомендуется представлять имена файлов в виде (Unicode) строк. К сожалению, некоторые имена файлов в Unix невозможно представить в виде строк, поэтому приложениям, которым нужна поддержка произвольных имён файлов в Unix, следует использовать байтовые объекты для представления путей. Обратно: использование байтовых объектов не позволяет представить все имена файлов в Windows (в стандартной кодировке `mbcs`), поэтому приложения Windows должны использовать строковые объекты для доступа ко всем файлам.

> **Примечание**
>
> Все эти функции принимают в качестве параметров только объекты байт или только строки. Если возвращается путь или имя файла, результатом будет объект того же типа.

> **Предупреждение**
>
> В Windows многие из этих функций не поддерживают UNC-пути должным образом. [`splitunc()`](https://python-all.ru/3.0/library/os.path.html#os.path.splitunc) и [`ismount()`](https://python-all.ru/3.0/library/os.path.html#os.path.ismount) обрабатывают их корректно.

#### `[os.path.abspath]os.path.abspath(path)`

Возвращает нормализованную абсолютную версию пути

*path*

. На большинстве платформ это эквивалентно

`normpath(join(os.getcwd(), path))`

.

#### `[os.path.basename]os.path.basename(path)`

Возвращает базовое имя пути

*path*

. Это вторая половина пары, возвращаемой

`split(path)`

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

**basename**

; если

**basename**

для

`'/foo/bar/'`

возвращает

`'bar'`

, то функция

[`basename()`](https://python-all.ru/3.0/library/os.path.html#os.path.basename)

возвращает пустую строку (

`''`

).

#### `[os.path.commonprefix]os.path.commonprefix(list)`

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

*list*

. Если

*list*

пуст, возвращает пустую строку (

`''`

). Обратите внимание: результат может быть некорректным путём, поскольку сравнение выполняется посимвольно.

#### `[os.path.dirname]os.path.dirname(path)`

Возвращает имя каталога пути

*path*

. Это первая половина пары, возвращаемой

`split(path)`

.

#### `[os.path.exists]os.path.exists(path)`

Возвращает

`True`

, если

*path*

указывает на существующий путь. Возвращает

`False`

для битых символических ссылок. На некоторых платформах эта функция может вернуть

`False`

, если нет прав на выполнение

[`os.stat()`](https://python-all.ru/3.0/library/os.html#os.stat)

для запрошенного файла, даже если

*path*

физически существует.

#### `[os.path.lexists]os.path.lexists(path)`

Возвращает

`True`

, если

*path*

указывает на существующий путь. Возвращает

`True`

для битых символических ссылок. Эквивалентно

[`exists()`](https://python-all.ru/3.0/library/os.path.html#os.path.exists)

на платформах без

[`os.lstat()`](https://python-all.ru/3.0/library/os.html#os.lstat)

.

#### `[os.path.expanduser]os.path.expanduser(path)`

В Unix и Windows возвращает аргумент, в котором начальный компонент `~` или `~user` заменяется на домашний каталог этого *пользователя*.

В Unix начальный символ `~` заменяется на переменную окружения **HOME**, если она установлена; в противном случае домашний каталог текущего пользователя ищется в файле паролей с помощью встроенного модуля [`pwd`](https://python-all.ru/3.0/library/pwd.html#module-pwd). Начальный символ `~user` ищется непосредственно в файле паролей.

В Windows используются **HOME** и **USERPROFILE**, если они установлены; в противном случае используется комбинация **HOMEPATH** и **HOMEDRIVE**. Начальный символ `~user` обрабатывается путём удаления последнего компонента каталога из созданного выше пользовательского пути.

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

#### `[os.path.expandvars]os.path.expandvars(path)`

Возвращает аргумент с раскрытыми переменными окружения. Подстроки вида `$name` или `${name}` заменяются на значение переменной окружения *name*. Некорректные имена переменных и ссылки на несуществующие переменные остаются без изменений.

В Windows, помимо `$name` и `${name}`, поддерживается раскрытие `%name%`.

#### `[os.path.getatime]os.path.getatime(path)`

Возвращает время последнего доступа к *path*. Возвращаемое значение – число, выражающее количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.0/library/time.html#module-time)). Возбуждает [`os.error`](https://python-all.ru/3.0/library/os.html#os.error), если файл не существует или недоступен.

Если [`os.stat_float_times()`](https://python-all.ru/3.0/library/os.html#os.stat_float_times) возвращает True, результат – число с плавающей точкой .

#### `[os.path.getmtime]os.path.getmtime(path)`

Возвращает время последнего изменения *path*. Возвращаемое значение – число, выражающее количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.0/library/time.html#module-time)). Возбуждает [`os.error`](https://python-all.ru/3.0/library/os.html#os.error), если файл не существует или недоступен.

Если [`os.stat_float_times()`](https://python-all.ru/3.0/library/os.html#os.stat_float_times) возвращает True, результат – число с плавающей точкой .

#### `[os.path.getctime]os.path.getctime(path)`

Возвращает системное ctime, которое в одних системах (например, Unix) является временем последнего изменения, а в других (например, Windows) – временем создания для

*path*

. Возвращаемое значение – число, выражающее количество секунд с начала эпохи (см. модуль

[`time`](https://python-all.ru/3.0/library/time.html#module-time)

). Возбуждает

[`os.error`](https://python-all.ru/3.0/library/os.html#os.error)

, если файл не существует или недоступен.

#### `[os.path.getsize]os.path.getsize(path)`

Возвращает размер

*path*

в байтах. Возбуждает

[`os.error`](https://python-all.ru/3.0/library/os.html#os.error)

, если файл не существует или недоступен.

#### `[os.path.isabs]os.path.isabs(path)`

Возвращает

`True`

, если

*path*

является абсолютным путём. В Unix это означает, что он начинается с косой черты, в Windows – что он начинается с обратной косой черты после удаления возможной буквы диска.

#### `[os.path.isfile]os.path.isfile(path)`

Возвращает

`True`

, если

*path*

является существующим обычным файлом. Эта функция переходит по символическим ссылкам, поэтому и

[`islink()`](https://python-all.ru/3.0/library/os.path.html#os.path.islink)

, и

[`isfile()`](https://python-all.ru/3.0/library/os.path.html#os.path.isfile)

могут быть истинными для одного и того же пути.

#### `[os.path.isdir]os.path.isdir(path)`

Возвращает

`True`

, если

*path*

является существующей директорией. Эта функция переходит по символическим ссылкам, поэтому и

[`islink()`](https://python-all.ru/3.0/library/os.path.html#os.path.islink)

, и

[`isdir()`](https://python-all.ru/3.0/library/os.path.html#os.path.isdir)

могут быть истинными для одного и того же пути.

#### `[os.path.islink]os.path.islink(path)`

Возвращает

`True`

, если

*path*

указывает на элемент каталога, являющийся символической ссылкой. Всегда возвращает

`False`

, если символические ссылки не поддерживаются.

#### `[os.path.ismount]os.path.ismount(path)`

Возвращает

`True`

, если путь

*path*

является

*точкой монтирования*

: точкой в файловой системе, куда смонтирована другая файловая система. Функция проверяет, находится ли родительский каталог

*path*

, то есть

`path/..`

, на другом устройстве, чем

*path*

, или

`path/..`

и

*path*

указывают на один и тот же i-node на одном устройстве – это позволяет определять точки монтирования для всех вариантов Unix и POSIX.

#### `[os.path.join]os.path.join(path1[, path2[, ...]])`

Объединяет один или несколько компонентов пути с учётом контекста. Если какой-либо компонент является абсолютным путём, все предыдущие компоненты (в Windows – включая предыдущую букву диска, если она была) отбрасываются, и объединение продолжается. Возвращаемое значение – конкатенация

*path1*

и, опционально,

*path2*

и т.д., с ровно одним разделителем каталогов (

`os.sep`

) между компонентами, если только

*path2*

не пуст. Обратите внимание, что в Windows, поскольку для каждого диска существует текущий каталог,

`os.path.join("c:", "foo")`

представляет путь, относительный текущего каталога на диске

`C:`

(

`c:foo`

), а не

`c:\foo`

.

#### `[os.path.normcase]os.path.normcase(path)`

Нормализует регистр символов в пути. В Unix возвращает путь без изменений; в файловых системах без учёта регистра преобразует путь в нижний регистр. В Windows также заменяет прямые слеши на обратные.

#### `[os.path.normpath]os.path.normpath(path)`

Нормализует путь. Убирает лишние разделители и ссылки на родительские каталоги, так что

`A//B`

,

`A/./B`

и

`A/foo/../B`

становятся

`A/B`

. Регистр не нормализуется (для этого используется

[`normcase()`](https://python-all.ru/3.0/library/os.path.html#os.path.normcase)

). В Windows заменяет прямые слеши на обратные. Следует понимать, что это может изменить значение пути, если он содержит символические ссылки!

#### `[os.path.realpath]os.path.realpath(path)`

Возвращает канонический путь указанного имени файла, устраняя все символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой).

#### `[os.path.relpath]os.path.relpath(path[, start])`

Возвращает относительный путь к *path* либо от текущего каталога, либо от заданной точки *start*.

*start* по умолчанию равен [`os.curdir`](https://python-all.ru/3.0/library/os.html#os.curdir). Доступность: Windows, Unix.

#### `[os.path.samefile]os.path.samefile(path1, path2)`

Возвращает

`True`

, если оба аргумента-пути указывают на один и тот же файл или каталог (определяется по номеру устройства и номеру i-node). Вызывает исключение, если вызов

[`os.stat()`](https://python-all.ru/3.0/library/os.html#os.stat)

для любого из путей завершается ошибкой. Доступность: Unix.

#### `[os.path.sameopenfile]os.path.sameopenfile(fp1, fp2)`

Возвращает

`True`

, если файловые дескрипторы

*fp1*

и

*fp2*

указывают на один и тот же файл. Доступность: Unix.

#### `[os.path.samestat]os.path.samestat(stat1, stat2)`

Возвращает

`True`

, если кортежи статистики

*stat1*

и

*stat2*

относятся к одному и тому же файлу. Эти структуры могут быть возвращены

`fstat()`

,

`lstat()`

или

`stat()`

. Эта функция реализует базовое сравнение, используемое

[`samefile()`](https://python-all.ru/3.0/library/os.path.html#os.path.samefile)

и

[`sameopenfile()`](https://python-all.ru/3.0/library/os.path.html#os.path.sameopenfile)

. Доступность: Unix.

#### `[os.path.split]os.path.split(path)`

Разделяет имя пути

*path*

на пару

`(head, tail)`

, где

*tail*

– последний компонент пути, а

*head*

– всё, что предшествует ему. Часть

*tail*

никогда не содержит косую черту; если

*path*

заканчивается косой чертой,

*tail*

будет пуст. Если в

*path*

нет косой черты,

*head*

будет пуст. Если

*path*

пуст, то и

*head*

, и

*tail*

пусты. Замыкающие косые черты удаляются из

*head*

, если только он не является корнем (только одна или несколько косых черт). Почти во всех случаях

`join(head, tail)`

равно

*path*

(единственное исключение – когда между

*head*

и

*tail*

было несколько косых черт).

#### `[os.path.splitdrive]os.path.splitdrive(path)`

Разделяет имя пути

*path*

на пару

`(drive, tail)`

, где

*drive*

– либо спецификация диска, либо пустая строка. В системах, не использующих спецификации дисков,

*drive*

всегда будет пустой строкой. Во всех случаях

`drive + tail`

будет совпадать с

*path*

.

#### `[os.path.splitext]os.path.splitext(path)`

Разделяет путь

*path*

на пару

`(root, ext)`

, такую, что

`root + ext == path`

, причём

*ext*

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

`splitext('.cshrc')`

возвращает

`('.cshrc', '')`

.

#### `[os.path.splitunc]os.path.splitunc(path)`

Разделяет имя пути

*path*

на пару

`(unc, rest)`

так, что

*unc*

– это точка монтирования UNC (например,

`r'\\host\mount'`

), если она присутствует, а

*rest*

– остальная часть пути (например,

`r'\path\file.ext'`

). Для путей, содержащих буквы дисков,

*unc*

всегда будет пустой строкой. Доступность: Windows.

#### `[os.path.supports_unicode_filenames]os.path.supports_unicode_filenames`

True, если произвольные строки Unicode могут использоваться в качестве имён файлов (с учётом ограничений, налагаемых файловой системой), и если

[`os.listdir()`](https://python-all.ru/3.0/library/os.html#os.listdir)

возвращает строки, содержащие символы, которые невозможно представить в ASCII.
