os.path.md
1> **Источник:** https://python-all.ru/3.4/library/os.path.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 11.2. [`os.path`](https://python-all.ru/3.4/library/os.path.html#module-os.path) – Распространённые операции с путями89Этот модуль реализует несколько полезных функций для работы с путями. Для чтения и записи файлов см. [`open()`](https://python-all.ru/3.4/library/functions.html#open), а для доступа к файловой системе – модуль [`os`](https://python-all.ru/3.4/library/os.html#module-os). Параметры пути могут быть строками или байтами. Приложениям рекомендуется представлять имена файлов в виде (Unicode) строк. К сожалению, некоторые имена файлов в Unix невозможно представить в виде строк, поэтому приложениям, которым нужна поддержка произвольных имён файлов в Unix, следует использовать байтовые объекты для представления путей. Обратно: использование байтовых объектов не позволяет представить все имена файлов в Windows (в стандартной кодировке `mbcs`), поэтому приложения Windows должны использовать строковые объекты для доступа ко всем файлам.1011В отличие от оболочки Unix, Python не выполняет *автоматического* раскрытия путей. Функции [`expanduser()`](https://python-all.ru/3.4/library/os.path.html#os.path.expanduser) и [`expandvars()`](https://python-all.ru/3.4/library/os.path.html#os.path.expandvars) можно вызывать явно, когда приложению требуется раскрытие путей, подобное оболочке. (См. также модуль [`glob`](https://python-all.ru/3.4/library/glob.html#module-glob).)1213> **См. также**14>15> Модуль [`pathlib`](https://python-all.ru/3.4/library/pathlib.html#module-pathlib) предоставляет высокоуровневые объекты путей.1617> **Примечание**18>19> Все эти функции принимают в качестве параметров только объекты байт или только строки. Если возвращается путь или имя файла, результатом будет объект того же типа.2021> **Примечание**22>23> Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке существует несколько версий этого модуля. Модуль [`os.path`](https://python-all.ru/3.4/library/os.path.html#module-os.path) всегда соответствует операционной системе, в которой запущен Python, и поэтому пригоден для локальных путей. Однако можно импортировать и использовать отдельные модули, если нужно работать с путём, который *всегда* находится в одном из различных форматов. Все они имеют одинаковый интерфейс:24>25> - `posixpath` для путей в стиле UNIX26> - `ntpath` для путей Windows27> - [`macpath`](https://python-all.ru/3.4/library/macpath.html#module-macpath) для путей старого стиля MacOS2829#### `os.path.abspath(path)`3031Возвращает нормализованный абсолютный вариант пути *path*. На большинстве платформ это эквивалентно вызову функции [`normpath()`](https://python-all.ru/3.4/library/os.path.html#os.path.normpath) следующим образом: `normpath(join(os.getcwd(), path))`.3233#### `os.path.basename(path)`3435Возвращает базовое имя пути *path*. Это второй элемент пары, возвращаемой при передаче *path* функции [`split()`](https://python-all.ru/3.4/library/os.path.html#os.path.split). Обратите внимание, что результат этой функции отличается от программы Unix **basename**; **basename** для `'/foo/bar/'` возвращает `'bar'`, а функция [`basename()`](https://python-all.ru/3.4/library/os.path.html#os.path.basename) возвращает пустую строку (`''`).3637#### `os.path.commonprefix(list)`3839Возвращает самый длинный общий префикс путей (посимвольно), который является префиксом всех путей в *list*. Если *list* пуст, возвращает пустую строку (`''`). Обратите внимание: результат может быть некорректным путём, поскольку сравнение выполняется посимвольно.4041#### `os.path.dirname(path)`4243Возвращает имя каталога пути *path*. Это первый элемент пары, возвращаемой при передаче *path* функции [`split()`](https://python-all.ru/3.4/library/os.path.html#os.path.split).4445#### `os.path.exists(path)`4647Возвращает `True`, если *path* указывает на существующий путь или открытый файловый дескриптор. Возвращает `False` для битых символических ссылок. На некоторых платформах функция может вернуть `False`, если нет прав на выполнение [`os.stat()`](https://python-all.ru/3.4/library/os.html#os.stat) для запрашиваемого файла, даже если *path* физически существует.4849Изменено в версии 3.3: *path* теперь может быть целым числом: возвращается `True`, если это открытый файловый дескриптор, иначе `False`.5051#### `os.path.lexists(path)`5253Возвращает `True`, если *path* указывает на существующий путь. Возвращает `True` для битых символических ссылок. Эквивалентно [`exists()`](https://python-all.ru/3.4/library/os.path.html#os.path.exists) на платформах без [`os.lstat()`](https://python-all.ru/3.4/library/os.html#os.lstat).5455#### `os.path.expanduser(path)`5657В Unix и Windows возвращает аргумент, в котором начальный компонент `~` или `~user` заменяется на домашний каталог этого *пользователя*.5859В Unix начальный `~` заменяется на значение переменной окружения `HOME`, если она установлена; в противном случае домашний каталог текущего пользователя определяется по файлу паролей с помощью встроенного модуля [`pwd`](https://python-all.ru/3.4/library/pwd.html#module-pwd). Начальный `~user` ищется непосредственно в файле паролей.6061В Windows, если установлены, используются `HOME` и `USERPROFILE`; в противном случае используется комбинация `HOMEPATH` и `HOMEDRIVE`. Начальный `~user` обрабатывается путём удаления последнего компонента каталога из созданного выше пути пользователя.6263Если разворачивание не удалось или путь не начинается с тильды, путь возвращается без изменений.6465#### `os.path.expandvars(path)`6667Возвращает аргумент с раскрытыми переменными окружения. Подстроки вида `$name` или `${name}` заменяются на значение переменной окружения *name*. Некорректные имена переменных и ссылки на несуществующие переменные остаются без изменений.6869В Windows, помимо `$name` и `${name}`, поддерживается раскрытие `%name%`.7071#### `os.path.getatime(path)`7273Возвращает время последнего доступа к *path*. Возвращаемое значение – число секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.4/library/time.html#module-time)). Вызывает [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError), если файл не существует или недоступен.7475Если [`os.stat_float_times()`](https://python-all.ru/3.4/library/os.html#os.stat_float_times) возвращает `True`, результат – число с плавающей запятой.7677#### `os.path.getmtime(path)`7879Возвращает время последнего изменения *path*. Возвращаемое значение – число giving the number of seconds since the epoch (см. модуль [`time`](https://python-all.ru/3.4/library/time.html#module-time)). Вызывает [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError), если файл не существует или недоступен.8081Если [`os.stat_float_times()`](https://python-all.ru/3.4/library/os.html#os.stat_float_times) возвращает `True`, результатом является число с плавающей запятой.8283#### `os.path.getctime(path)`8485Возвращает системное ctime, которое на некоторых системах (например, Unix) является временем последнего изменения метаданных, а на других (например, Windows) – временем создания для *path*. Возвращаемое значение – число, выражающее количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.4/library/time.html#module-time)). Вызывает [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError), если файл не существует или недоступен.8687#### `os.path.getsize(path)`8889Возвращает размер *path* в байтах. Вызывает [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError), если файл не существует или недоступен.9091#### `os.path.isabs(path)`9293Возвращает `True`, если *path* является абсолютным путём. В Unix это означает, что он начинается с косой черты, в Windows – что он начинается с обратной косой черты после удаления возможной буквы диска.9495#### `os.path.isfile(path)`9697Возвращает `True`, если *path* является существующим обычным файлом. Эта функция переходит по символическим ссылкам, поэтому и [`islink()`](https://python-all.ru/3.4/library/os.path.html#os.path.islink), и [`isfile()`](https://python-all.ru/3.4/library/os.path.html#os.path.isfile) могут быть истинными для одного и того же пути.9899#### `os.path.isdir(path)`100101Возвращает `True`, если *path* является существующей директорией. Эта функция переходит по символическим ссылкам, поэтому и [`islink()`](https://python-all.ru/3.4/library/os.path.html#os.path.islink), и [`isdir()`](https://python-all.ru/3.4/library/os.path.html#os.path.isdir) могут быть истинными для одного и того же пути.102103#### `os.path.islink(path)`104105Возвращает `True`, если *path* указывает на элемент директории, являющийся символической ссылкой. Всегда возвращает `False`, если символические ссылки не поддерживаются средой выполнения Python.106107#### `os.path.ismount(path)`108109Возвращает `True`, если путь *path* является *точкой монтирования*: точкой в файловой системе, куда смонтирована другая файловая система. В POSIX функция проверяет, находится ли родительская директория *path*, `path/..`, на другом устройстве, чем *path*, или указывают ли `path/..` и *path* на один и тот же инод на одном устройстве – это должно определять точки монтирования для всех вариантов Unix и POSIX. В Windows корневая буква диска и общий ресурс UNC всегда являются точками монтирования, и для любого другого пути вызывается `GetVolumePathName`, чтобы проверить, отличается ли он от исходного пути.110111Новое в версии 3.4: Поддержка обнаружения точек монтирования, не являющихся корневыми, в Windows.112113#### `os.path.join(path, *paths)`114115Умно объединяет один или несколько компонентов пути. Возвращаемое значение – это конкатенация *path* и всех элементов *\*paths* с ровно одним разделителем директорий (`os.sep`) после каждой непустой части, кроме последней, то есть результат будет заканчиваться разделителем только в том случае, если последняя часть пуста. Если компонент является абсолютным путём, все предыдущие компоненты отбрасываются, и объединение продолжается с этого абсолютного компонента.116117В Windows буква диска не сбрасывается при обнаружении компонента с абсолютным путём (например, `r'\foo'`). Если компонент содержит букву диска, все предыдущие компоненты отбрасываются и буква диска сбрасывается. Обратите внимание, что поскольку для каждого диска существует текущий каталог, `os.path.join("c:", "foo")` представляет путь относительно текущего каталога на диске `C:` (`c:foo`), а не `c:\foo`.118119#### `os.path.normcase(path)`120121Нормализует регистр пути. В Unix и Mac OS X возвращает путь без изменений; в файловых системах, нечувствительных к регистру, преобразует путь в нижний регистр. В Windows также заменяет прямые косые черты на обратные. Вызывает TypeError, если тип *path* не `str` или `bytes`.122123#### `os.path.normpath(path)`124125Нормализует путь, удаляя избыточные разделители и ссылки на родительские каталоги, так что `A//B`, `A/B/`, `A/./B` и `A/foo/../B` все превращаются в `A/B`. Эта манипуляция со строкой может изменить смысл пути, содержащего символические ссылки. В Windows преобразует прямые косые черты в обратные. Для нормализации регистра используйте [`normcase()`](https://python-all.ru/3.4/library/os.path.html#os.path.normcase).126127#### `os.path.realpath(path)`128129Возвращает канонический путь указанного имени файла, устраняя все символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой).130131#### `os.path.relpath(path, start=os.curdir)`132133Возвращает относительный путь к *path* либо от текущего каталога, либо от необязательного стартового каталога *start*. Это вычисление пути: файловая система не используется для подтверждения существования или типа *path* или *start*.134135*start* по умолчанию равен [`os.curdir`](https://python-all.ru/3.4/library/os.html#os.curdir).136137Доступность: Unix, Windows.138139#### `os.path.samefile(path1, path2)`140141Возвращает `True`, если оба аргумента пути указывают на один и тот же файл или директорию. Это определяется по номеру устройства и номеру инод; вызывается исключение, если вызов [`os.stat()`](https://python-all.ru/3.4/library/os.html#os.stat) для любого из путей завершается ошибкой.142143Доступность: Unix, Windows.144145Изменено в версии 3.2: Добавлена поддержка Windows.146147Изменено в версии 3.4: Теперь в Windows используется та же реализация, что и на всех остальных платформах.148149#### `os.path.sameopenfile(fp1, fp2)`150151Возвращает `True`, если файловые дескрипторы *fp1* и *fp2* ссылаются на один и тот же файл.152153Доступность: Unix, Windows.154155Изменено в версии 3.2: Добавлена поддержка Windows.156157#### `os.path.samestat(stat1, stat2)`158159Возвращает `True`, если stat-кортежи *stat1* и *stat2* относятся к одному и тому же файлу. Эти структуры могут быть возвращены [`os.fstat()`](https://python-all.ru/3.4/library/os.html#os.fstat), [`os.lstat()`](https://python-all.ru/3.4/library/os.html#os.lstat) или [`os.stat()`](https://python-all.ru/3.4/library/os.html#os.stat). Эта функция реализует базовое сравнение, используемое [`samefile()`](https://python-all.ru/3.4/library/os.path.html#os.path.samefile) и [`sameopenfile()`](https://python-all.ru/3.4/library/os.path.html#os.path.sameopenfile).160161Доступность: Unix, Windows.162163Изменено в версии 3.4: Добавлена поддержка Windows.164165#### `os.path.split(path)`166167Разделяет путь *path* на пару `(head, tail)`, где *tail* – это последний компонент пути, а *head* – всё, что ему предшествует. В *tail* никогда не будет косой черты; если *path* заканчивается слешем, *tail* будет пустым. Если в *path* нет слеша, *head* будет пустым. Если *path* пуст, то и *head*, и *tail* пусты. Замыкающие слеши удаляются из *head*, если только это не корневой путь (один или более слешей). В любом случае, `join(head, tail)` возвращает путь к тому же расположению, что и *path* (но строки могут отличаться). См. также функции [`dirname()`](https://python-all.ru/3.4/library/os.path.html#os.path.dirname) и [`basename()`](https://python-all.ru/3.4/library/os.path.html#os.path.basename).168169#### `os.path.splitdrive(path)`170171Разделяет путь *path* на пару `(drive, tail)`, где *drive* – это либо точка монтирования, либо пустая строка. В системах, не использующих обозначения дисков, *drive* всегда будет пустой строкой. В любом случае, `drive + tail` будет эквивалентно *path*.172173В Windows разделяет путь на диск/UNC-ресурс и относительный путь.174175Если путь содержит букву диска, drive будет содержать всё до двоеточия включительно. Например, `splitdrive("c:/dir")` возвращает `("c:", "/dir")`176177Если путь содержит UNC-путь, drive будет содержать имя хоста и общий ресурс, вплоть до четвёртого разделителя, но не включая его. Например, `splitdrive("//host/computer/dir")` возвращает `("//host/computer", "/dir")`178179#### `os.path.splitext(path)`180181Разделяет путь *path* на пару `(root, ext)`, такую, что `root + ext == path`, причём *ext* либо пустая, либо начинается с точки и содержит не более одной точки. Начальные точки в базовом имени игнорируются; `splitext('.cshrc')` возвращает `('.cshrc', '')`.182183#### `os.path.splitunc(path)`184185Устарело с версии 3.1: Вместо этого используйте *splitdrive*.186187Разделяет путь *path* на пару `(unc, rest)` так, что *unc* – это UNC-точка монтирования (например, `r'\\host\mount'`), если она присутствует, а *rest* – остаток пути (например, `r'\path\file.ext'`). Для путей, содержащих буквы дисков, *unc* всегда будет пустой строкой.188189Доступность: Windows.190191#### `os.path.supports_unicode_filenames`192193`True`, если в качестве имён файлов можно использовать произвольные строки Юникода (в пределах ограничений, накладываемых файловой системой).194