os.path.md
1> **Источник:** https://python-all.ru/3.1/library/os.path.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 10.1. `os.path` – Распространённые операции с именами путей89Этот модуль реализует несколько полезных функций для работы с путями. Для чтения и записи файлов см. [`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 должны использовать строковые объекты для доступа ко всем файлам.1011> **Примечание**12>13> Все эти функции принимают в качестве параметров только объекты байт или только строки. Если возвращается путь или имя файла, результатом будет объект того же типа.1415> **Примечание**16>17> Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке есть несколько версий этого модуля. Модуль `os.path` всегда соответствует той операционой системе, на которой запущен Python, и поэтому пригоден для локальных путей. Однако можно импортировать и использовать отдельные модули, если требуется работать с путём, который *всегда* представлен в одном из других форматов. Все они имеют одинаковый интерфейс:18>19> - `posixpath` для путей в стиле UNIX20> - `ntpath` для путей Windows21> - [`macpath`](https://python-all.ru/3.1/library/macpath.html#module-macpath) для путей старого стиля MacOS22> - `os2emxpath` для путей OS/2 EMX2324#### `os.path.abspath(path)`2526Возвращает нормализованную абсолютную версию пути2728*path*2930. На большинстве платформ это эквивалентно3132`normpath(join(os.getcwd(), path))`3334.3536#### `os.path.basename(path)`3738Возвращает базовое имя пути3940*path*4142. Это вторая половина пары, возвращаемой4344`split(path)`4546. Обратите внимание, что результат этой функции отличается от программы Unix4748**basename**4950; если5152**basename**5354для5556`'/foo/bar/'`5758возвращает5960`'bar'`6162, то функция6364[`basename()`](https://python-all.ru/3.1/library/os.path.html#os.path.basename)6566возвращает пустую строку (6768`''`6970).7172#### `os.path.commonprefix(list)`7374Возвращает самый длинный общий префикс путей (посимвольно), который является префиксом всех путей в7576*list*7778. Если7980*list*8182пуст, возвращает пустую строку (8384`''`8586). Обратите внимание: результат может быть некорректным путём, поскольку сравнение выполняется посимвольно.8788#### `os.path.dirname(path)`8990Возвращает имя каталога пути9192*path*9394. Это первая половина пары, возвращаемой9596`split(path)`9798.99100#### `os.path.exists(path)`101102Возвращает103104`True`105106, если107108*path*109110указывает на существующий путь. Возвращает111112`False`113114для битых символических ссылок. На некоторых платформах эта функция может вернуть115116`False`117118, если нет прав на выполнение119120[`os.stat()`](https://python-all.ru/3.1/library/os.html#os.stat)121122для запрошенного файла, даже если123124*path*125126физически существует.127128#### `os.path.lexists(path)`129130Возвращает131132`True`133134, если135136*path*137138указывает на существующий путь. Возвращает139140`True`141142для битых символических ссылок. Эквивалентно143144[`exists()`](https://python-all.ru/3.1/library/os.path.html#os.path.exists)145146на платформах без147148[`os.lstat()`](https://python-all.ru/3.1/library/os.html#os.lstat)149150.151152#### `os.path.expanduser(path)`153154В Unix и Windows возвращает аргумент, в котором начальный компонент `~` или `~user` заменяется на домашний каталог этого *пользователя*.155156В Unix начальный символ `~` заменяется на переменную окружения **HOME**, если она установлена; в противном случае домашний каталог текущего пользователя ищется в файле паролей с помощью встроенного модуля [`pwd`](https://python-all.ru/3.1/library/pwd.html#module-pwd). Начальный символ `~user` ищется непосредственно в файле паролей.157158В Windows используются **HOME** и **USERPROFILE**, если они установлены; в противном случае используется комбинация **HOMEPATH** и **HOMEDRIVE**. Начальный символ `~user` обрабатывается путём удаления последнего компонента каталога из созданного выше пользовательского пути.159160Если разворачивание не удалось или путь не начинается с тильды, путь возвращается без изменений.161162#### `os.path.expandvars(path)`163164Возвращает аргумент с раскрытыми переменными окружения. Подстроки вида `$name` или `${name}` заменяются на значение переменной окружения *name*. Некорректные имена переменных и ссылки на несуществующие переменные остаются без изменений.165166В Windows, помимо `$name` и `${name}`, поддерживается раскрытие `%name%`.167168#### `os.path.getatime(path)`169170Возвращает время последнего доступа к *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), если файл не существует или недоступен.171172Если [`os.stat_float_times()`](https://python-all.ru/3.1/library/os.html#os.stat_float_times) возвращает True, результат – число с плавающей точкой .173174#### `os.path.getmtime(path)`175176Возвращает время последнего изменения *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), если файл не существует или недоступен.177178Если [`os.stat_float_times()`](https://python-all.ru/3.1/library/os.html#os.stat_float_times) возвращает True, результат – число с плавающей точкой .179180#### `os.path.getctime(path)`181182Возвращает системное ctime, которое в одних системах (например, Unix) является временем последнего изменения, а в других (например, Windows) – временем создания для183184*path*185186. Возвращаемое значение – число, выражающее количество секунд с начала эпохи (см. модуль187188[`time`](https://python-all.ru/3.1/library/time.html#module-time)189190). Возбуждает191192[`os.error`](https://python-all.ru/3.1/library/os.html#os.error)193194, если файл не существует или недоступен.195196#### `os.path.getsize(path)`197198Возвращает размер199200*path*201202в байтах. Возбуждает203204[`os.error`](https://python-all.ru/3.1/library/os.html#os.error)205206, если файл не существует или недоступен.207208#### `os.path.isabs(path)`209210Возвращает211212`True`213214, если215216*path*217218является абсолютным путём. В Unix это означает, что он начинается с косой черты, в Windows – что он начинается с обратной косой черты после удаления возможной буквы диска.219220#### `os.path.isfile(path)`221222Возвращает223224`True`225226, если227228*path*229230является существующим обычным файлом. Эта функция переходит по символическим ссылкам, поэтому и231232[`islink()`](https://python-all.ru/3.1/library/os.path.html#os.path.islink)233234, и235236[`isfile()`](https://python-all.ru/3.1/library/os.path.html#os.path.isfile)237238могут быть истинными для одного и того же пути.239240#### `os.path.isdir(path)`241242Возвращает243244`True`245246, если247248*path*249250является существующей директорией. Эта функция переходит по символическим ссылкам, поэтому и251252[`islink()`](https://python-all.ru/3.1/library/os.path.html#os.path.islink)253254, и255256[`isdir()`](https://python-all.ru/3.1/library/os.path.html#os.path.isdir)257258могут быть истинными для одного и того же пути.259260#### `os.path.islink(path)`261262Возвращает263264`True`265266, если267268*path*269270указывает на элемент каталога, являющийся символической ссылкой. Всегда возвращает271272`False`273274, если символические ссылки не поддерживаются.275276#### `os.path.ismount(path)`277278Возвращает279280`True`281282, если путь283284*path*285286является287288*точкой монтирования*289290: точкой в файловой системе, куда смонтирована другая файловая система. Функция проверяет, находится ли родительский каталог291292*path*293294, то есть295296`path/..`297298, на другом устройстве, чем299300*path*301302, или303304`path/..`305306и307308*path*309310указывают на один и тот же i-node на одном устройстве – это позволяет определять точки монтирования для всех вариантов Unix и POSIX.311312#### `os.path.join(path1[, path2[, ...]])`313314Объединяет один или несколько компонентов пути с учётом контекста. Если какой-либо компонент является абсолютным путём, все предыдущие компоненты (в Windows – включая предыдущую букву диска, если она была) отбрасываются, и объединение продолжается. Возвращаемое значение – конкатенация315316*path1*317318и, опционально,319320*path2*321322и т.д., с ровно одним разделителем каталогов (323324`os.sep`325326) между компонентами, если только327328*path2*329330не пуст. Обратите внимание, что в Windows, поскольку для каждого диска существует текущий каталог,331332`os.path.join("c:", "foo")`333334представляет путь, относительный текущего каталога на диске335336`C:`337338(339340`c:foo`341342), а не343344`c:\foo`345346.347348#### `os.path.normcase(path)`349350Нормализует регистр символов в пути. В Unix и Mac OS X возвращает путь без изменений; на файловых системах, нечувствительных к регистру, приводит путь к нижнему регистру. В Windows также заменяет прямые слеши на обратные.351352#### `os.path.normpath(path)`353354Нормализует путь. Он схлопывает лишние разделители и ссылки на родительский каталог, так что `A//B`, `A/B/`, `A/./B` и `A/foo/../B` превращаются в `A/B`.355356Эта функция не нормализует регистр (для этого используйте [`normcase()`](https://python-all.ru/3.1/library/os.path.html#os.path.normcase)). В Windows она заменяет прямые слеши на обратные. Следует понимать, что это может изменить смысл пути, если в нём присутствуют символические ссылки!357358#### `os.path.realpath(path)`359360Возвращает канонический путь указанного имени файла, устраняя все символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой).361362#### `os.path.relpath(path[, start])`363364Возвращает относительный путь к *path* либо от текущего каталога, либо от заданной точки *start*.365366*start* по умолчанию равен [`os.curdir`](https://python-all.ru/3.1/library/os.html#os.curdir).367368Доступность: Unix, Windows.369370#### `os.path.samefile(path1, path2)`371372Return `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.373374Доступность: Unix.375376#### `os.path.sameopenfile(fp1, fp2)`377378Возвращает `True`, если файловые дескрипторы *fp1* и *fp2* ссылаются на один и тот же файл.379380Доступность: Unix.381382#### `os.path.samestat(stat1, stat2)`383384Return `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).385386Доступность: Unix.387388#### `os.path.split(path)`389390Разделяет имя пути391392*path*393394на пару395396`(head, tail)`397398, где399400*tail*401402– это последний компонент имени пути, а403404*head*405406– всё, что предшествует ему.407408*tail*409410никогда не содержит косую черту; если411412*path*413414заканчивается косой чертой,415416*tail*417418будет пустым. Если в419420*path*421422нет косой черты,423424*head*425426будет пустым. Если427428*path*429430пуст, то и431432*head*433434, и435436*tail*437438пусты. Замыкающие косые черты удаляются из439440*head*441442, если только он не является корнем (одна или несколько косых черт). В любом случае443444`join(head, tail)`445446возвращает путь к тому же местоположению, что и447448*path*449450(но строки могут отличаться).451452#### `os.path.splitdrive(path)`453454Разделяет путь *path* на пару `(drive, tail)`, где *drive* – это либо точка монтирования, либо пустая строка. В системах, не использующих обозначения дисков, *drive* всегда будет пустой строкой. В любом случае, `drive + tail` будет эквивалентно *path*.455456В Windows разделяет путь на диск/UNC-ресурс и относительный путь.457458Если путь содержит букву диска, drive будет содержать всё до двоеточия включительно. Например, `splitdrive("c:/dir")` возвращает `("c:", "/dir")`459460Если путь содержит UNC-путь, drive будет содержать имя хоста и общий ресурс, вплоть до четвёртого разделителя, но не включая его. Например, `splitdrive("//host/computer/dir")` возвращает `("//host/computer", "/dir")`461462#### `os.path.splitext(path)`463464Разделяет путь465466*path*467468на пару469470`(root, ext)`471472, такую, что473474`root + ext == path`475476, причём477478*ext*479480либо пустая, либо начинается с точки и содержит не более одной точки. Начальные точки в базовом имени игнорируются;481482`splitext('.cshrc')`483484возвращает485486`('.cshrc', '')`487488.489490#### `os.path.splitunc(path)`491492Устарело с версии 3.1: Вместо этого используйте *splitdrive*.493494Разделяет путь *path* на пару `(unc, rest)` так, что *unc* – это UNC-точка монтирования (например, `r'\\host\mount'`), если она присутствует, а *rest* – остаток пути (например, `r'\path\file.ext'`). Для путей, содержащих буквы дисков, *unc* всегда будет пустой строкой.495496Доступность: Windows.497498#### `os.path.supports_unicode_filenames`499500True, если произвольные строки Unicode могут быть использованы в качестве имен файлов (с учетом ограничений, накладываемых файловой системой).501