os.path.md
1> **Источник:** https://python-all.ru/3.16/library/os.path.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `os.path` – Типовые операции с именами путей89**Исходный код:** [Lib/genericpath.py](https://python-all.ru/src/main/Lib/genericpath.py), [Lib/posixpath.py](https://python-all.ru/src/main/Lib/posixpath.py) (для POSIX) и [Lib/ntpath.py](https://python-all.ru/src/main/Lib/ntpath.py) (для Windows).1011---1213Этот модуль реализует несколько полезных функций для работы с именами путей. Для чтения или записи файлов обратитесь к [`open()`](https://python-all.ru/3.16/library/functions.html#open), а для доступа к файловой системе – к модулю [`os`](https://python-all.ru/3.16/library/os.html#module-os). Параметры пути могут быть переданы в виде строк, байт или любого объекта, реализующего протокол [`os.PathLike`](https://python-all.ru/3.16/library/os.html#os.PathLike).1415В отличие от оболочки Unix, Python не выполняет *автоматического* раскрытия путей. Функции, такие как [`expanduser()`](https://python-all.ru/3.16/library/os.path.html#os.path.expanduser) и [`expandvars()`](https://python-all.ru/3.16/library/os.path.html#os.path.expandvars), можно вызывать явно, когда приложению требуется раскрытие пути в стиле оболочки. (См. также модуль [`glob`](https://python-all.ru/3.16/library/glob.html#module-glob).)1617> **См. также**18>19> Модуль [`pathlib`](https://python-all.ru/3.16/library/pathlib.html#module-pathlib) предоставляет высокоуровневые объекты путей.2021> **Примечание**22>23> Все эти функции принимают в качестве параметров только объекты байт или только строки. Если возвращается путь или имя файла, результатом будет объект того же типа.2425> **Примечание**26>27> Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке есть несколько версий этого модуля. Модуль `os.path` всегда представляет собой модуль путей, подходящий для операционной системы, на которой выполняется Python, и поэтому пригоден для локальных путей. Однако вы также можете импортировать и использовать отдельные модули, если хотите работать с путём, который *всегда* находится в одном из этих форматов. Все они имеют одинаковый интерфейс:28>29> - `posixpath` для путей в стиле UNIX30> - `ntpath` для путей Windows3132Изменено в версии 3.8: [`exists()`](https://python-all.ru/3.16/library/os.path.html#os.path.exists), [`lexists()`](https://python-all.ru/3.16/library/os.path.html#os.path.lexists), [`isdir()`](https://python-all.ru/3.16/library/os.path.html#os.path.isdir), [`isfile()`](https://python-all.ru/3.16/library/os.path.html#os.path.isfile), [`islink()`](https://python-all.ru/3.16/library/os.path.html#os.path.islink) и [`ismount()`](https://python-all.ru/3.16/library/os.path.html#os.path.ismount) теперь возвращают `False` вместо возбуждения исключения для путей, содержащих символы или байты, непредставимые на уровне ОС.3334#### `os.path.abspath(path)`3536Возвращает нормализованную абсолютную версию пути *path*. На большинстве платформ это эквивалентно вызову `normpath(join(os.getcwd(), path))`.3738> **См. также**39>40> [`os.path.join()`](https://python-all.ru/3.16/library/os.path.html#os.path.join) и [`os.path.normpath()`](https://python-all.ru/3.16/library/os.path.html#os.path.normpath).4142Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).4344#### `os.path.basename(path, /)`4546Возвращает базовое имя пути *path*. Это второй элемент пары, возвращаемой при передаче *path* функции [`split()`](https://python-all.ru/3.16/library/os.path.html#os.path.split). Обратите внимание, что результат этой функции отличается от программы Unix **basename**; если **basename** для `'/foo/bar/'` возвращает `'bar'`, то функция `basename()` возвращает пустую строку (`''`).4748Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).4950#### `os.path.commonpath(paths)`5152Возвращает самый длинный общий подпуть для каждого пути в итерируемом объекте *paths*. Возбуждает [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError), если *paths* содержат как абсолютные, так и относительные пути, если *paths* находятся на разных дисках или если *paths* пуст. В отличие от [`commonprefix()`](https://python-all.ru/3.16/library/os.path.html#os.path.commonprefix), эта функция возвращает корректный путь.5354Добавлено в версии 3.5.5556Изменено в версии 3.6: Принимает последовательность [объектов, подобных путям](https://python-all.ru/3.16/glossary.html#term-path-like-object).5758Изменено в версии 3.13: Теперь можно передавать любой итерируемый объект, а не только последовательности.5960#### `os.path.commonprefix(list, /)`6162Возвращает самый длинный строковый префикс (символ за символом), который является префиксом всех строк в *list*. Если *list* пуст, возвращается пустая строка (`''`).6364> **Предупреждение**65>66> Эта функция может возвращать недопустимые пути, так как работает посимвольно. Если нужен **общий префикс пути**, то алгоритм, реализованный в этой функции, не является надёжным. Используйте [`commonpath()`](https://python-all.ru/3.16/library/os.path.html#os.path.commonpath) для поиска общего префикса пути.67>68> ```python69> >>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])70> '/usr/l'71>72> >>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])73> '/usr'74> ```7576Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).7778Устарело с версии 3.15: Устарело в пользу [`os.path.commonpath()`](https://python-all.ru/3.16/library/os.path.html#os.path.commonpath) для префиксов путей. Функция `os.path.commonprefix()` признана устаревшей из-за вводящего в заблуждение названия и модуля. Эта функция небезопасна для использования в качестве префиксов путей, несмотря на то, что она включена в модуль для работы с путями, что означает, что её использование может легко привести к случайному внедрению уязвимостей обхода путей в программы на Python.7980#### `os.path.dirname(path, /)`8182Возвращает имя каталога пути *path*. Это первый элемент пары, возвращаемой при передаче *path* функции [`split()`](https://python-all.ru/3.16/library/os.path.html#os.path.split).8384Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).8586#### `os.path.exists(path)`8788Возвращает `True`, если *path* указывает на существующий путь или открытый файловый дескриптор. Возвращает `False` для битых символических ссылок. На некоторых платформах эта функция может вернуть `False`, если нет разрешения на выполнение [`os.stat()`](https://python-all.ru/3.16/library/os.html#os.stat) для запрошенного файла, даже если *path* физически существует.8990Изменено в версии 3.3: *path* теперь может быть целым числом: возвращается `True`, если это открытый файловый дескриптор, и `False` в противном случае.9192Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).9394#### `os.path.lexists(path)`9596Возвращает `True`, если *path* указывает на существующий путь, включая битые символические ссылки. Эквивалентно [`exists()`](https://python-all.ru/3.16/library/os.path.html#os.path.exists) на платформах, где нет [`os.lstat()`](https://python-all.ru/3.16/library/os.html#os.lstat).9798Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).99100#### `os.path.expanduser(path)`101102В Unix и Windows возвращает аргумент, в котором начальный компонент `~` или `~user` заменён на домашний каталог этого *пользователя*.103104В Unix начальный `~` заменяется на значение переменной окружения `HOME`, если она установлена; в противном случае домашний каталог текущего пользователя ищется в базе паролей через встроенный модуль [`pwd`](https://python-all.ru/3.16/library/pwd.html#module-pwd). Начальный `~user` ищется напрямую в базе паролей.105106В Windows будет использоваться `USERPROFILE`, если он установлен; в противном случае будет использоваться комбинация `HOMEPATH` и `HOMEDRIVE`. Начальный `~user` обрабатывается путём проверки, совпадает ли последний компонент каталога домашнего каталога текущего пользователя с `USERNAME`, и замены его при совпадении.107108Если разворачивание не удалось или путь не начинается с тильды, путь возвращается без изменений.109110Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).111112Изменено в версии 3.8: Больше не использует `HOME` в Windows.113114#### `os.path.expandvars(path)`115116Возвращает аргумент с развёрнутыми переменными окружения. Подстроки вида `$name` или `${name}` заменяются значением переменной окружения *name*. Некорректные имена переменных и ссылки на несуществующие переменные остаются без изменений.117118В Windows поддерживаются расширения `%name%` в дополнение к `$name` и `${name}`.119120Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).121122#### `os.path.getatime(path, /)`123124Возвращает время последнего доступа к *path*. Возвращаемое значение – число с плавающей запятой, количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.16/library/time.html#module-time)). Возбуждает [`OSError`](https://python-all.ru/3.16/library/exceptions.html#OSError), если файл не существует или недоступен.125126#### `os.path.getmtime(path, /)`127128Возвращает время последнего изменения *path*. Возвращаемое значение – число с плавающей запятой, количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.16/library/time.html#module-time)). Возбуждает [`OSError`](https://python-all.ru/3.16/library/exceptions.html#OSError), если файл не существует или недоступен.129130Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).131132#### `os.path.getctime(path, /)`133134Возвращает системное ctime, которое в одних системах (например, Unix) является временем последнего изменения метаданных, а в других (например, Windows) – временем создания для *path*. Возвращаемое значение – число секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.16/library/time.html#module-time)). Возбуждает [`OSError`](https://python-all.ru/3.16/library/exceptions.html#OSError), если файл не существует или недоступен.135136Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).137138#### `os.path.getsize(path, /)`139140Возвращает размер в байтах *path*. Возбуждает [`OSError`](https://python-all.ru/3.16/library/exceptions.html#OSError), если файл не существует или недоступен.141142Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).143144#### `os.path.isabs(path, /)`145146Возвращает `True`, если *path* является абсолютным путём. В Unix это означает, что путь начинается с косой черты, в Windows – что он начинается с двух обратных косых черт или с буквы диска, двоеточия и обратной косой черты вместе.147148> **См. также**149>150> [`abspath()`](https://python-all.ru/3.16/library/os.path.html#os.path.abspath)151152Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).153154Изменено в версии 3.13: В Windows возвращает `False`, если указанный путь начинается ровно с одной (обратной) косой черты.155156#### `os.path.isfile(path)`157158Возвращает `True`, если *path* является [`existing`](https://python-all.ru/3.16/library/os.path.html#os.path.exists) обычным файлом. Функция следует по символическим ссылкам, поэтому и [`islink()`](https://python-all.ru/3.16/library/os.path.html#os.path.islink), и `isfile()` могут быть истинны для одного и того же пути.159160Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).161162#### `os.path.isdir(path, /)`163164Возвращает `True`, если *path* является [`existing`](https://python-all.ru/3.16/library/os.path.html#os.path.exists) каталогом. Функция следует по символическим ссылкам, поэтому и [`islink()`](https://python-all.ru/3.16/library/os.path.html#os.path.islink), и `isdir()` могут быть истинны для одного и того же пути.165166Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).167168#### `os.path.isjunction(path)`169170Возвращает `True`, если *path* ссылается на [`existing`](https://python-all.ru/3.16/library/os.path.html#os.path.lexists) запись каталога, являющуюся junction (точкой соединения). Всегда возвращает `False`, если junctions не поддерживаются на текущей платформе.171172Добавлено в версии 3.12.173174#### `os.path.islink(path)`175176Возвращает `True`, если *path* ссылается на [`existing`](https://python-all.ru/3.16/library/os.path.html#os.path.exists) запись каталога, являющуюся символической ссылкой. Всегда `False`, если символические ссылки не поддерживаются средой выполнения Python.177178Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).179180#### `os.path.ismount(path)`181182Возвращает `True`, если имя пути *path* является *точкой монтирования*: точкой в файловой системе, куда примонтирована другая файловая система. В POSIX функция проверяет, находится ли родительский каталог *path*, `path/..`, на другом устройстве, чем *path*, или указывают ли `path/..` и *path* на один и тот же индексный дескриптор на одном устройстве – это позволяет обнаруживать точки монтирования для всех вариантов Unix и POSIX. Она не может надёжно обнаруживать bind-монтирования в одной файловой системе. В системах Linux она всегда возвращает `True` для подтомов btrfs, даже если они не являются точками монтирования. В Windows корневой каталог буквы диска и общая папка UNC всегда являются точками монтирования, а для любого другого пути вызывается `GetVolumePathName`, чтобы проверить, отличается ли он от входного пути.183184Изменено в версии 3.4: Добавлена поддержка обнаружения не корневых точек монтирования в Windows.185186Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).187188#### `os.path.isdevdrive(path)`189190Возвращает `True`, если имя пути *path* находится на диске разработчика Windows (Dev Drive). Диск разработчика оптимизирован для сценариев разработки и обеспечивает более высокую производительность при чтении и записи файлов. Рекомендуется для исходного кода, временных каталогов сборки, кешей пакетов и других операций с интенсивным вводом-выводом.191192Может вызывать ошибку для недопустимого пути, например, без распознаваемого диска, но возвращает `False` на платформах, не поддерживающих диски разработчика. См. [документацию Windows](https://python-all.ru/3.16/library/os.path.html) для получения информации о включении и создании дисков разработчика.193194Добавлено в версии 3.12.195196Изменено в версии 3.13: Теперь функция доступна на всех платформах и всегда будет возвращать `False` на тех, которые не поддерживают диски разработчика.197198#### `os.path.isreserved(path)`199200Возвращает `True`, если *path* является зарезервированным именем пути на текущей системе.201202В Windows зарезервированные имена файлов включают те, что заканчиваются пробелом или точкой; содержат двоеточия (например, файловые потоки данных вида “name:stream”), символы подстановки (т.е. `'*?"<>'`), символ вертикальной черты или управляющие символы ASCII; а также имена DOS-устройств, такие как “NUL”, “CON”, “CONIN$”, “CONOUT$”, “AUX”, “PRN”, “COM1” и “LPT1”.203204> **Примечание**205>206> Эта функция приблизительно реализует правила для зарезервированных путей в большинстве систем Windows. Эти правила меняются со временем в различных выпусках Windows. Функция может быть обновлена в будущих версиях Python по мере широкого распространения изменений в правилах.207208[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Windows.209210Добавлено в версии 3.13.211212#### `os.path.join(path, /, *paths)`213214Умно объединяет один или несколько сегментов пути. Возвращаемое значение – это конкатенация *path* и всех элементов *\*paths*, с ровно одним разделителем каталогов после каждой непустой части, кроме последней. То есть результат будет заканчиваться разделителем только в том случае, если последняя часть пуста или сама заканчивается разделителем.215216Если сегмент является абсолютным путём (что в Windows требует указания и диска, и корневого каталога), то все предыдущие сегменты игнорируются, и объединение продолжается с этого абсолютного сегмента. Например, в Linux:217218```python219>>> os.path.join('/home/foo', 'bar')220'/home/foo/bar'221>>> os.path.join('/home/foo', '/home/bar')222'/home/bar'223```224225В Windows диск не сбрасывается при обнаружении сегмента с корневым каталогом (например, `r'\foo'`). Если сегмент находится на другом диске или является абсолютным путём, все предыдущие сегменты игнорируются, а диск сбрасывается. Например:226227```python228>>> os.path.join('c:\\', 'foo')229'c:\\foo'230>>> os.path.join('c:\\foo', 'd:\\bar')231'd:\\bar'232```233234Обратите внимание, что поскольку для каждого диска существует текущий каталог, `os.path.join("c:", "foo")` представляет путь относительно текущего каталога на диске `C:` (`c:foo`), а не `c:\foo`.235236Изменено в версии 3.6: Теперь принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object) для *path* и *paths*.237238#### `os.path.normcase(path, /)`239240Нормализует регистр имени пути. В Windows преобразует все символы в имени пути в нижний регистр, а также заменяет прямые косые черты на обратные. В других операционных системах возвращает путь без изменений.241242Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).243244#### `os.path.normpath(path)`245246Нормализует имя пути, удаляя лишние разделители и ссылки на родительский каталог, так что `A//B`, `A/B/`, `A/./B` и `A/foo/../B` все превращаются в `A/B`. Эта строковая операция может изменить значение пути, содержащего символические ссылки. В Windows преобразует прямые косые черты в обратные. Для нормализации регистра используйте [`normcase()`](https://python-all.ru/3.16/library/os.path.html#os.path.normcase).247248> **Примечание**249>250> В системах POSIX, в соответствии с [IEEE Std 1003.1 2013 Edition; 4.13 Pathname Resolution](https://python-all.ru/3.16/library/os.path.html), если имя пути начинается ровно с двух косых черт, первый компонент после начальных символов может интерпретироваться способом, определяемым реализацией, хотя более двух начальных символов должны рассматриваться как один символ.251252Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).253254#### `os.path.realpath(path, /, *, strict=False)`255256Возвращает канонический путь указанного имени файла, устраняя все символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой). В Windows эта функция также разрешает имена в стиле MS-DOS (также называемые 8.3), такие как `C:\\PROGRA~1`, в `C:\\Program Files`.257258По умолчанию путь вычисляется до первого компонента, который не существует, является циклом символических ссылок или при вычислении которого возникает [`OSError`](https://python-all.ru/3.16/library/exceptions.html#OSError). Все такие компоненты добавляются без изменений к существующей части пути.259260Некоторые ошибки, обрабатываемые таким образом, включают «в доступе отказано», «не каталог» или «неверный аргумент внутренней функции». Таким образом, результирующий путь может отсутствовать или быть недоступным, все еще содержать ссылки или циклы, а также проходить через не-каталоги.261262Это поведение можно изменить с помощью именованных аргументов:263264Если *strict* равно `True`, первая ошибка, возникшая при вычислении пути, пробрасывается повторно. В частности, [`FileNotFoundError`](https://python-all.ru/3.16/library/exceptions.html#FileNotFoundError) возбуждается, если *path* не существует, или другое [`OSError`](https://python-all.ru/3.16/library/exceptions.html#OSError), если он недоступен по другой причине. Если *strict* равно [`ALL_BUT_LAST`](https://python-all.ru/3.16/library/os.path.html#os.path.ALL_BUT_LAST), последний компонент пути может отсутствовать, но все остальные ошибки возбуждаются.265266Если *strict* равен [`os.path.ALLOW_MISSING`](https://python-all.ru/3.16/library/os.path.html#os.path.ALLOW_MISSING), ошибки, отличные от [`FileNotFoundError`](https://python-all.ru/3.16/library/exceptions.html#FileNotFoundError), возбуждаются повторно (как и в случае с `strict=True`). Таким образом, возвращаемый путь не будет содержать символических ссылок, но указанный файл и некоторые из его родительских каталогов могут отсутствовать.267268> **Примечание**269>270> Эта функция эмулирует процедуру операционной системы по приведению пути к каноническому виду, которая немного отличается в Windows и UNIX в отношении того, как взаимодействуют ссылки и последующие компоненты пути.271>272> API операционной системы приводят пути к каноническому виду по мере необходимости, так что обычно нет необходимости вызывать эту функцию.273274Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).275276Изменено в версии 3.8: Символические ссылки и точки соединения теперь разрешаются в Windows.277278Изменено в версии 3.10: Добавлен параметр *strict*.279280Изменено в версии 3.15: Были добавлены значения [`ALL_BUT_LAST`](https://python-all.ru/3.16/library/os.path.html#os.path.ALL_BUT_LAST) и [`ALLOW_MISSING`](https://python-all.ru/3.16/library/os.path.html#os.path.ALLOW_MISSING) для параметра *strict*.281282#### `os.path.ALL_BUT_LAST`283284Специальное значение, используемое для аргумента *strict* в [`realpath()`](https://python-all.ru/3.16/library/os.path.html#os.path.realpath).285286Добавлено в версии 3.15.287288#### `os.path.ALLOW_MISSING`289290Специальное значение, используемое для аргумента *strict* в [`realpath()`](https://python-all.ru/3.16/library/os.path.html#os.path.realpath).291292Добавлено в версии 3.15.293294#### `os.path.relpath(path, start=os.curdir)`295296Возвращает относительный путь к *path* либо от текущего каталога, либо от указанного *start* каталога. Это вычисление пути: файловая система не опрашивается для подтверждения существования или природы *path* или *start*. В Windows [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError) возбуждается, когда *path* и *start* находятся на разных дисках.297298*start* по умолчанию равен [`os.curdir`](https://python-all.ru/3.16/library/os.html#os.curdir).299300Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).301302#### `os.path.samefile(path1, path2, /)`303304Возвращает `True`, если оба указанных пути ссылаются на один и тот же файл или каталог. Это определяется по номеру устройства и номеру индексного дескриптора; возбуждается исключение, если вызов [`os.stat()`](https://python-all.ru/3.16/library/os.html#os.stat) для любого из путей завершается ошибкой.305306Изменено в версии 3.2: Добавлена поддержка Windows.307308Изменено в версии 3.4: Теперь в Windows используется та же реализация, что и на всех остальных платформах.309310Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).311312#### `os.path.sameopenfile(fp1, fp2)`313314Возвращает `True`, если файловые дескрипторы *fp1* и *fp2* ссылаются на один и тот же файл.315316Изменено в версии 3.2: Добавлена поддержка Windows.317318Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).319320#### `os.path.samestat(stat1, stat2, /)`321322Возвращает `True`, если кортежи stat *stat1* и *stat2* ссылаются на один и тот же файл. Эти структуры могли быть возвращены [`os.fstat()`](https://python-all.ru/3.16/library/os.html#os.fstat), [`os.lstat()`](https://python-all.ru/3.16/library/os.html#os.lstat) или [`os.stat()`](https://python-all.ru/3.16/library/os.html#os.stat). Эта функция реализует сравнение, лежащее в основе [`samefile()`](https://python-all.ru/3.16/library/os.path.html#os.path.samefile) и [`sameopenfile()`](https://python-all.ru/3.16/library/os.path.html#os.path.sameopenfile).323324Изменено в версии 3.4: Добавлена поддержка Windows.325326#### `os.path.split(path, /)`327328Разделяет путь *path* на пару `(head, tail)`, где *tail* – последний компонент пути, а *head* – всё, что ему предшествует. Часть *tail* никогда не содержит косой черты; если *path* заканчивается косой чертой, *tail* будет пустым. Если в *path* нет косых черт, *head* будет пустым. Если *path* пуст, то и *head*, и *tail* пусты. Конечные косые черты удаляются из *head*, если только это не корневой каталог (одна или несколько косых черт). В любом случае `join(head, tail)` возвращает путь к тому же расположению, что и *path* (но строки могут различаться). См. также функции [`join()`](https://python-all.ru/3.16/library/os.path.html#os.path.join), [`dirname()`](https://python-all.ru/3.16/library/os.path.html#os.path.dirname) и [`basename()`](https://python-all.ru/3.16/library/os.path.html#os.path.basename).329330Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).331332#### `os.path.splitdrive(path, /)`333334Разделяет путь *path* на пару `(drive, tail)`, где *drive* – либо точка монтирования, либо пустая строка. В системах, не использующих спецификации дисков, *drive* всегда будет пустой строкой. В любом случае `drive + tail` будет тем же, что и *path*.335336В Windows разделяет путь на диск/UNC-ресурс и относительный путь.337338Если путь содержит букву диска, drive будет содержать всё вплоть до двоеточия включительно:339340```python341>>> splitdrive("c:/dir")342("c:", "/dir")343```344345Если путь содержит UNC-путь, drive будет содержать имя узла и общую папку:346347```python348>>> splitdrive("//host/computer/dir")349("//host/computer", "/dir")350```351352Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).353354#### `os.path.splitroot(path, /)`355356Разделяет путь *path* на кортеж из трёх элементов `(drive, root, tail)`, где *drive* – имя устройства или точка монтирования, *root* – строка разделителей после устройства, а *tail* – всё, что после корня. Любой из этих элементов может быть пустой строкой. В любом случае `drive + root + tail` будет таким же, как *path*.357358В системах POSIX *drive* всегда пуст. *root* может быть пустым (если *path* относительный), одной косой чертой (если *path* абсолютный) или двумя косыми чертами (определяется реализацией согласно [IEEE Std 1003.1-2017; 4.13 Разрешение пути](https://python-all.ru/3.16/library/os.path.html)). Например:359360```python361>>> splitroot('/home/sam')362('', '/', 'home/sam')363>>> splitroot('//home/sam')364('', '//', 'home/sam')365>>> splitroot('///home/sam')366('', '/', '//home/sam')367```368369В Windows *drive* может быть пустым, буквой диска, UNC-ресурсом или именем устройства. *root* может быть пустым, прямой косой чертой или обратной косой чертой. Например:370371```python372>>> splitroot('C:/Users/Sam')373('C:', '/', 'Users/Sam')374>>> splitroot('//Server/Share/Users/Sam')375('//Server/Share', '/', 'Users/Sam')376```377378Добавлено в версии 3.12.379380#### `os.path.splitext(path, /)`381382Разделяет путь *path* на пару `(root, ext)`, такую что `root + ext == path`, а расширение *ext* пусто или начинается с точки и содержит не более одной точки.383384Если путь не содержит расширения, *ext* будет `''`:385386```python387>>> splitext('bar')388('bar', '')389```390391Если путь содержит расширение, то *ext* будет установлен в это расширение, включая начальную точку. Обратите внимание, что предыдущие точки игнорируются:392393```python394>>> splitext('foo.bar.exe')395('foo.bar', '.exe')396>>> splitext('/foo/bar.exe')397('/foo/bar', '.exe')398```399400Начальные точки последнего компонента пути считаются частью корня:401402```python403>>> splitext('.cshrc')404('.cshrc', '')405>>> splitext('/foo/....jpg')406('/foo/....jpg', '')407```408409Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object).410411#### `os.path.supports_unicode_filenames`412413`True`, если произвольные строки Unicode могут использоваться в качестве имён файлов (с учётом ограничений, накладываемых файловой системой).414