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

---

# 10.1. `os.path` – Распространённые операции с именами путей

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

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

> **Примечание**
>
> Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке есть несколько версий этого модуля. Модуль `os.path` всегда соответствует той операционой системе, на которой запущен Python, и поэтому пригоден для локальных путей. Однако можно импортировать и использовать отдельные модули, если требуется работать с путём, который *всегда* представлен в одном из других форматов. Все они имеют одинаковый интерфейс:
>
> - `posixpath` для путей в стиле UNIX
> - `ntpath` для путей Windows
> - [`macpath`](https://python-all.ru/3.1/library/macpath.html#module-macpath) для путей старого стиля MacOS
> - `os2emxpath` для путей OS/2 EMX

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

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

*path*

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

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

.

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

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

*path*

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

`split(path)`

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

**basename**

; если

**basename**

для

`'/foo/bar/'`

возвращает

`'bar'`

, то функция

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

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

`''`

).

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

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

*list*

. Если

*list*

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

`''`

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

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

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

*path*

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

`split(path)`

.

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

Возвращает

`True`

, если

*path*

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

`False`

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

`False`

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

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

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

*path*

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

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

Возвращает

`True`

, если

*path*

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

`True`

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

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

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

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

.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

*path*

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

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

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

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

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

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

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

*path*

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

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

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

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

Возвращает

`True`

, если

*path*

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

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

Возвращает

`True`

, если

*path*

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

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

, и

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

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

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

Возвращает

`True`

, если

*path*

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

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

, и

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

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

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

Возвращает

`True`

, если

*path*

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

`False`

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

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

Возвращает

`True`

, если путь

*path*

является

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

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

*path*

, то есть

`path/..`

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

*path*

, или

`path/..`

и

*path*

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

#### `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(path)`

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

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

Нормализует путь. Он схлопывает лишние разделители и ссылки на родительский каталог, так что `A//B`, `A/B/`, `A/./B` и `A/foo/../B` превращаются в `A/B`.

Эта функция не нормализует регистр (для этого используйте [`normcase()`](https://python-all.ru/3.1/library/os.path.html#os.path.normcase)). В Windows она заменяет прямые слеши на обратные. Следует понимать, что это может изменить смысл пути, если в нём присутствуют символические ссылки!

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

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

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

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

*start* по умолчанию равен [`os.curdir`](https://python-all.ru/3.1/library/os.html#os.curdir).

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

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

Return `True` if both pathname arguments refer to the same file or directory (as indicated by device number and i-node number). Raise an exception if a [`os.stat()`](https://python-all.ru/3.1/library/os.html#os.stat) call on either pathname fails.

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

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

Возвращает `True`, если файловые дескрипторы *fp1* и *fp2* ссылаются на один и тот же файл.

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

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

Return `True` if the stat tuples *stat1* and *stat2* refer to the same file. These structures may have been returned by `fstat()`, `lstat()`, or `stat()`. This function implements the underlying comparison used by [`samefile()`](https://python-all.ru/3.1/library/os.path.html#os.path.samefile) and [`sameopenfile()`](https://python-all.ru/3.1/library/os.path.html#os.path.sameopenfile).

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

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

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

*path*

на пару

`(head, tail)`

, где

*tail*

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

*head*

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

*tail*

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

*path*

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

*tail*

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

*path*

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

*head*

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

*path*

пуст, то и

*head*

, и

*tail*

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

*head*

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

`join(head, tail)`

возвращает путь к тому же местоположению, что и

*path*

(но строки могут отличаться).

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

Разделяет путь *path* на пару `(drive, tail)`, где *drive* – это либо точка монтирования, либо пустая строка. В системах, не использующих обозначения дисков, *drive* всегда будет пустой строкой. В любом случае, `drive + tail` будет эквивалентно *path*.

В Windows разделяет путь на диск/UNC-ресурс и относительный путь.

Если путь содержит букву диска, drive будет содержать всё до двоеточия включительно. Например, `splitdrive("c:/dir")` возвращает `("c:", "/dir")`

Если путь содержит UNC-путь, drive будет содержать имя хоста и общий ресурс, вплоть до четвёртого разделителя, но не включая его. Например, `splitdrive("//host/computer/dir")` возвращает `("//host/computer", "/dir")`

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

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

*path*

на пару

`(root, ext)`

, такую, что

`root + ext == path`

, причём

*ext*

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

`splitext('.cshrc')`

возвращает

`('.cshrc', '')`

.

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

Устарело с версии 3.1: Вместо этого используйте *splitdrive*.

Разделяет путь *path* на пару `(unc, rest)` так, что *unc* – это UNC-точка монтирования (например, `r'\\host\mount'`), если она присутствует, а *rest* – остаток пути (например, `r'\path\file.ext'`). Для путей, содержащих буквы дисков, *unc* всегда будет пустой строкой.

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

#### `os.path.supports_unicode_filenames`

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