Документация Python неофициальный перевод

os.path.md

183 строк · 21.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.2/library/os.path.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 10.1. [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path) – Распространённые манипуляции с путями89Этот модуль реализует несколько полезных функций для работы с путями. Для чтения и записи файлов см. [`open()`](https://python-all.ru/3.2/library/functions.html#open), а для доступа к файловой системе – модуль [`os`](https://python-all.ru/3.2/library/os.html#module-os). Параметры пути могут быть строками или байтами. Приложениям рекомендуется представлять имена файлов в виде (Unicode) строк. К сожалению, некоторые имена файлов в Unix невозможно представить в виде строк, поэтому приложениям, которым нужна поддержка произвольных имён файлов в Unix, следует использовать байтовые объекты для представления путей. Обратно: использование байтовых объектов не позволяет представить все имена файлов в Windows (в стандартной кодировке `mbcs`), поэтому приложения Windows должны использовать строковые объекты для доступа ко всем файлам.1011В отличие от оболочки Unix, Python не выполняет *автоматического* раскрытия путей. Функции [`expanduser()`](https://python-all.ru/3.2/library/os.path.html#os.path.expanduser) и [`expandvars()`](https://python-all.ru/3.2/library/os.path.html#os.path.expandvars) можно вызывать явно, когда приложению требуется раскрытие путей, подобное оболочке. (См. также модуль [`glob`](https://python-all.ru/3.2/library/glob.html#module-glob).)1213> **Примечание**14>15> Все эти функции принимают в качестве параметров только объекты байт или только строки. Если возвращается путь или имя файла, результатом будет объект того же типа.1617> **Примечание**18>19> Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке существует несколько версий этого модуля. Модуль [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path) всегда соответствует операционной системе, в которой запущен Python, и поэтому пригоден для локальных путей. Однако можно импортировать и использовать отдельные модули, если нужно работать с путём, который *всегда* находится в одном из различных форматов. Все они имеют одинаковый интерфейс:20>21> - `posixpath` для путей в стиле UNIX22> - `ntpath` для путей Windows23> - [`macpath`](https://python-all.ru/3.2/library/macpath.html#module-macpath) для путей старого стиля MacOS24> - `os2emxpath` для путей OS/2 EMX2526#### `os.path.abspath(path)`2728Возвращает нормализованный абсолютный вариант пути *path*. На большинстве платформ это эквивалентно вызову функции [`normpath()`](https://python-all.ru/3.2/library/os.path.html#os.path.normpath) следующим образом: `normpath(join(os.getcwd(), path))`.2930#### `os.path.basename(path)`3132Возвращает базовое имя пути *path*. Это второй элемент пары, возвращаемой при передаче *path* функции [`split()`](https://python-all.ru/3.2/library/os.path.html#os.path.split). Обратите внимание, что результат этой функции отличается от программы Unix **basename**; **basename** для `'/foo/bar/'` возвращает `'bar'`, а функция [`basename()`](https://python-all.ru/3.2/library/os.path.html#os.path.basename) возвращает пустую строку (`''`).3334#### `os.path.commonprefix(list)`3536Возвращает самый длинный общий префикс путей (посимвольно), который является префиксом всех путей в *list*. Если *list* пуст, возвращает пустую строку (`''`). Обратите внимание: результат может быть некорректным путём, поскольку сравнение выполняется посимвольно.3738#### `os.path.dirname(path)`3940Возвращает имя каталога пути *path*. Это первый элемент пары, возвращаемой при передаче *path* функции [`split()`](https://python-all.ru/3.2/library/os.path.html#os.path.split).4142#### `os.path.exists(path)`4344Возвращает `True`, если *path* указывает на существующий путь. Возвращает `False` для битых символических ссылок. На некоторых платформах эта функция может вернуть `False`, если нет прав на выполнение [`os.stat()`](https://python-all.ru/3.2/library/os.html#os.stat) для запрошенного файла, даже если *path* физически существует.4546#### `os.path.lexists(path)`4748Возвращает `True`, если *path* указывает на существующий путь. Возвращает `True` для битых символических ссылок. Эквивалентно [`exists()`](https://python-all.ru/3.2/library/os.path.html#os.path.exists) на платформах без [`os.lstat()`](https://python-all.ru/3.2/library/os.html#os.lstat).4950#### `os.path.expanduser(path)`5152В Unix и Windows возвращает аргумент, в котором начальный компонент `~` или `~user` заменяется на домашний каталог этого *пользователя*.5354В Unix начальный `~` заменяется на значение переменной окружения `HOME`, если она установлена; в противном случае домашний каталог текущего пользователя определяется по файлу паролей с помощью встроенного модуля [`pwd`](https://python-all.ru/3.2/library/pwd.html#module-pwd). Начальный `~user` ищется непосредственно в файле паролей.5556В Windows, если установлены, используются `HOME` и `USERPROFILE`; в противном случае используется комбинация `HOMEPATH` и `HOMEDRIVE`. Начальный `~user` обрабатывается путём удаления последнего компонента каталога из созданного выше пути пользователя.5758Если разворачивание не удалось или путь не начинается с тильды, путь возвращается без изменений.5960#### `os.path.expandvars(path)`6162Возвращает аргумент с раскрытыми переменными окружения. Подстроки вида `$name` или `${name}` заменяются на значение переменной окружения *name*. Некорректные имена переменных и ссылки на несуществующие переменные остаются без изменений.6364В Windows, помимо `$name` и `${name}`, поддерживается раскрытие `%name%`.6566#### `os.path.getatime(path)`6768Возвращает время последнего доступа к *path*. Возвращаемое значение – число, выражающее количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.2/library/time.html#module-time)). Возбуждает [`os.error`](https://python-all.ru/3.2/library/os.html#os.error), если файл не существует или недоступен.6970Если [`os.stat_float_times()`](https://python-all.ru/3.2/library/os.html#os.stat_float_times) возвращает True, результат – число с плавающей точкой .7172#### `os.path.getmtime(path)`7374Возвращает время последнего изменения *path*. Возвращаемое значение – число, выражающее количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.2/library/time.html#module-time)). Возбуждает [`os.error`](https://python-all.ru/3.2/library/os.html#os.error), если файл не существует или недоступен.7576Если [`os.stat_float_times()`](https://python-all.ru/3.2/library/os.html#os.stat_float_times) возвращает True, результат – число с плавающей точкой .7778#### `os.path.getctime(path)`7980Возвращает системное ctime, которое в одних системах (например, Unix) является временем последнего изменения, а в других (например, Windows) – временем создания для *path*. Возвращаемое значение – число, выражающее количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/3.2/library/time.html#module-time)). Возбуждает [`os.error`](https://python-all.ru/3.2/library/os.html#os.error), если файл не существует или недоступен.8182#### `os.path.getsize(path)`8384Возвращает размер *path* в байтах. Возбуждает [`os.error`](https://python-all.ru/3.2/library/os.html#os.error), если файл не существует или недоступен.8586#### `os.path.isabs(path)`8788Возвращает `True`, если *path* является абсолютным путём. В Unix это означает, что он начинается с косой черты, в Windows – что он начинается с обратной косой черты после удаления возможной буквы диска.8990#### `os.path.isfile(path)`9192Возвращает `True`, если *path* является существующим обычным файлом. Эта функция переходит по символическим ссылкам, поэтому и [`islink()`](https://python-all.ru/3.2/library/os.path.html#os.path.islink), и [`isfile()`](https://python-all.ru/3.2/library/os.path.html#os.path.isfile) могут быть истинными для одного и того же пути.9394#### `os.path.isdir(path)`9596Возвращает `True`, если *path* является существующей директорией. Эта функция переходит по символическим ссылкам, поэтому и [`islink()`](https://python-all.ru/3.2/library/os.path.html#os.path.islink), и [`isdir()`](https://python-all.ru/3.2/library/os.path.html#os.path.isdir) могут быть истинными для одного и того же пути.9798#### `os.path.islink(path)`99100Возвращает `True`, если *path* указывает на элемент каталога, являющийся символической ссылкой. Всегда возвращает `False`, если символические ссылки не поддерживаются.101102#### `os.path.ismount(path)`103104Возвращает `True`, если путь *path* является *точкой монтирования*: точкой в файловой системе, куда смонтирована другая файловая система. Функция проверяет, находится ли родительский каталог *path*, то есть `path/..`, на другом устройстве, чем *path*, или `path/..` и *path* указывают на один и тот же i-node на одном устройстве – это позволяет определять точки монтирования для всех вариантов Unix и POSIX.105106#### `os.path.join(path1[, path2[, ...]])`107108Умно объединяет один или несколько компонентов пути. Если какой-либо компонент является абсолютным путём, все предыдущие компоненты (в Windows, включая предыдущую букву диска, если она была) отбрасываются, и объединение продолжается. Возвращаемое значение – это конкатенация *path1* и, опционально, *path2* и т.д., с ровно одним разделителем каталогов (`os.sep`) после каждой непустой части, кроме последней. (Это означает, что пустая последняя часть приведёт к пути, оканчивающемуся разделителем.) Обратите внимание, что в Windows, так как для каждого диска существует текущий каталог, `os.path.join("c:", "foo")` представляет путь относительно текущего каталога на диске `C:` (`c:foo`), а не `c:\foo`.109110#### `os.path.normcase(path)`111112Нормализует регистр пути. В Unix и Mac OS X возвращает путь без изменений; в файловых системах, нечувствительных к регистру, преобразует путь в нижний регистр. В Windows также заменяет прямые косые черты на обратные. Вызывает TypeError, если тип *path* не `str` или `bytes`.113114#### `os.path.normpath(path)`115116Нормализует путь, удаляя избыточные разделители и ссылки на родительские каталоги, так что `A//B`, `A/B/`, `A/./B` и `A/foo/../B` все превращаются в `A/B`. Эта манипуляция со строкой может изменить смысл пути, содержащего символические ссылки. В Windows преобразует прямые косые черты в обратные. Для нормализации регистра используйте [`normcase()`](https://python-all.ru/3.2/library/os.path.html#os.path.normcase).117118#### `os.path.realpath(path)`119120Возвращает канонический путь указанного имени файла, устраняя все символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой).121122#### `os.path.relpath(path, start=None)`123124Возвращает относительный путь к *path* либо от текущего каталога, либо от заданной точки *start*.125126*start* по умолчанию равен [`os.curdir`](https://python-all.ru/3.2/library/os.html#os.curdir).127128Доступность: Unix, Windows.129130#### `os.path.samefile(path1, path2)`131132Возвращает `True`, если оба аргумента пути ссылаются на один и тот же файл или каталог. В Unix это определяется по номеру устройства и номеру i-node, и выбрасывается исключение, если вызов [`os.stat()`](https://python-all.ru/3.2/library/os.html#os.stat) для любого из путей завершается неудачей.133134В Windows два файла считаются одинаковыми, если они разрешаются в одно и то же конечное имя пути с помощью вызова Windows API GetFinalPathNameByHandle. Эта функция выбрасывает исключение, если не удаётся получить дескриптор ни для одного из файлов.135136Доступность: Unix, Windows.137138Изменено в версии 3.2: Добавлена поддержка Windows.139140#### `os.path.sameopenfile(fp1, fp2)`141142Возвращает `True`, если файловые дескрипторы *fp1* и *fp2* ссылаются на один и тот же файл.143144Доступность: Unix, Windows.145146Изменено в версии 3.2: Добавлена поддержка Windows.147148#### `os.path.samestat(stat1, stat2)`149150Возвращает `True`, если кортежи stat *stat1* и *stat2* указывают на один и тот же файл. Эти структуры могли быть возвращены `fstat()`, `lstat()` или [`stat()`](https://python-all.ru/3.2/library/stat.html#module-stat). Эта функция реализует базовое сравнение, используемое [`samefile()`](https://python-all.ru/3.2/library/os.path.html#os.path.samefile) и [`sameopenfile()`](https://python-all.ru/3.2/library/os.path.html#os.path.sameopenfile).151152Доступность: Unix.153154#### `os.path.split(path)`155156Разделяет путь *path* на пару `(head, tail)`, где *tail* – это последний компонент пути, а *head* – всё, что ему предшествует. В *tail* никогда не будет косой черты; если *path* заканчивается слешем, *tail* будет пустым. Если в *path* нет слеша, *head* будет пустым. Если *path* пуст, то и *head*, и *tail* пусты. Замыкающие слеши удаляются из *head*, если только это не корневой путь (один или более слешей). В любом случае, `join(head, tail)` возвращает путь к тому же расположению, что и *path* (но строки могут отличаться). См. также функции [`dirname()`](https://python-all.ru/3.2/library/os.path.html#os.path.dirname) и [`basename()`](https://python-all.ru/3.2/library/os.path.html#os.path.basename).157158#### `os.path.splitdrive(path)`159160Разделяет путь *path* на пару `(drive, tail)`, где *drive* – это либо точка монтирования, либо пустая строка. В системах, не использующих обозначения дисков, *drive* всегда будет пустой строкой. В любом случае, `drive + tail` будет эквивалентно *path*.161162В Windows разделяет путь на диск/UNC-ресурс и относительный путь.163164Если путь содержит букву диска, drive будет содержать всё до двоеточия включительно. Например, `splitdrive("c:/dir")` возвращает `("c:", "/dir")`165166Если путь содержит UNC-путь, drive будет содержать имя хоста и общий ресурс, вплоть до четвёртого разделителя, но не включая его. Например, `splitdrive("//host/computer/dir")` возвращает `("//host/computer", "/dir")`167168#### `os.path.splitext(path)`169170Разделяет путь *path* на пару `(root, ext)`, такую, что `root + ext == path`, причём *ext* либо пустая, либо начинается с точки и содержит не более одной точки. Начальные точки в базовом имени игнорируются; `splitext('.cshrc')` возвращает `('.cshrc', '')`.171172#### `os.path.splitunc(path)`173174Устарело с версии 3.1: Используйте *splitdrive* вместо этого.175176Разделяет путь *path* на пару `(unc, rest)` так, что *unc* – это UNC-точка монтирования (например, `r'\\host\mount'`), если она присутствует, а *rest* – остаток пути (например, `r'\path\file.ext'`). Для путей, содержащих буквы дисков, *unc* всегда будет пустой строкой.177178Доступность: Windows.179180#### `os.path.supports_unicode_filenames`181182True, если произвольные строки Unicode могут быть использованы в качестве имен файлов (с учетом ограничений, накладываемых файловой системой).183