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

os.path.md

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

1> **Источник:** https://python-all.ru/2.7/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/2.7/library/os.path.html#module-os.path) – Общие операции с путями89Этот модуль реализует несколько полезных функций для работы с путями. Для чтения или записи файлов см. [`open()`](https://python-all.ru/2.7/library/functions.html#open), а для доступа к файловой системе – модуль [`os`](https://python-all.ru/2.7/library/os.html#module-os).1011> **Примечание**12>13> В Windows многие из этих функций некорректно работают с UNC-путями. [`splitunc()`](https://python-all.ru/2.7/library/os.path.html#os.path.splitunc) и [`ismount()`](https://python-all.ru/2.7/library/os.path.html#os.path.ismount) обрабатывают их правильно.1415В отличие от оболочки Unix, Python не выполняет *автоматического* раскрытия путей. Функции [`expanduser()`](https://python-all.ru/2.7/library/os.path.html#os.path.expanduser) и [`expandvars()`](https://python-all.ru/2.7/library/os.path.html#os.path.expandvars) можно вызывать явно, если приложению требуется раскрытие путей как в оболочке. (См. также модуль [`glob`](https://python-all.ru/2.7/library/glob.html#module-glob).)1617> **Примечание**18>19> Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке есть несколько версий этого модуля. Модуль [`os.path`](https://python-all.ru/2.7/library/os.path.html#module-os.path) всегда представляет собой модуль путей, подходящий для операционной системы, на которой выполняется Python, и поэтому пригоден для локальных путей. Однако вы также можете импортировать и использовать отдельные модули, если хотите работать с путём, который *всегда* находится в одном из этих форматов. Все они имеют одинаковый интерфейс:20>21> - `posixpath` для путей в стиле UNIX22> - `ntpath` для путей Windows23> - [`macpath`](https://python-all.ru/2.7/library/macpath.html#module-macpath) для путей MacOS старого стиля24> - `os2emxpath` для путей OS/2 EMX2526#### `os.path.abspath(path)`2728Возвращает нормализованную абсолютную версию имени пути *path*. На большинстве платформ это эквивалентно вызову функции [`normpath()`](https://python-all.ru/2.7/library/os.path.html#os.path.normpath) следующим образом: `normpath(join(os.getcwd(), path))`.2930Новое в версии 1.5.2.3132#### `os.path.basename(path)`3334Возвращает базовое имя пути *path*. Это второй элемент пары, возвращаемой при передаче *path* функции [`split()`](https://python-all.ru/2.7/library/os.path.html#os.path.split). Обратите внимание, что результат этой функции отличается от программы Unix **basename**; если **basename** для `'/foo/bar/'` возвращает `'bar'`, то функция [`basename()`](https://python-all.ru/2.7/library/os.path.html#os.path.basename) возвращает пустую строку (`''`).3536#### `os.path.commonprefix(list)`3738Возвращает самый длинный общий префикс путей (посимвольно), который является префиксом всех путей в *list*. Если *list* пуст, возвращает пустую строку (`''`). Обратите внимание: результат может быть некорректным путём, поскольку сравнение выполняется посимвольно.3940#### `os.path.dirname(path)`4142Возвращает имя каталога пути *path*. Это первый элемент пары, возвращаемой при передаче *path* функции [`split()`](https://python-all.ru/2.7/library/os.path.html#os.path.split).4344#### `os.path.exists(path)`4546Возвращает `True`, если *path* указывает на существующий путь. Возвращает `False` для битых символических ссылок. На некоторых платформах эта функция может вернуть `False`, если нет разрешения на выполнение [`os.stat()`](https://python-all.ru/2.7/library/os.html#os.stat) для указанного файла, даже если *path* физически существует.4748#### `os.path.lexists(path)`4950Возвращает `True`, если *path* указывает на существующий путь. Возвращает `True` для битых символических ссылок. Эквивалент [`exists()`](https://python-all.ru/2.7/library/os.path.html#os.path.exists) на платформах без [`os.lstat()`](https://python-all.ru/2.7/library/os.html#os.lstat).5152Новое в версии 2.4.5354#### `os.path.expanduser(path)`5556В Unix и Windows возвращает аргумент, в котором начальный компонент `~` или `~user` заменён на домашний каталог этого *пользователя*.5758В Unix начальный `~` заменяется на значение переменной окружения `HOME`, если она установлена; в противном случае домашний каталог текущего пользователя ищется в базе паролей через встроенный модуль [`pwd`](https://python-all.ru/2.7/library/pwd.html#module-pwd). Начальный `~user` ищется напрямую в базе паролей.5960В Windows `HOME` и `USERPROFILE` используются, если они заданы; в противном случае используется комбинация `HOMEPATH` и `HOMEDRIVE`. Начальный `~user` обрабатывается путём удаления последнего компонента каталога из созданного выше пути пользователя.6162Если разворачивание не удалось или путь не начинается с тильды, путь возвращается без изменений.6364#### `os.path.expandvars(path)`6566Возвращает аргумент с развёрнутыми переменными окружения. Подстроки вида `$name` или `${name}` заменяются значением переменной окружения *name*. Некорректные имена переменных и ссылки на несуществующие переменные остаются без изменений.6768В Windows поддерживаются расширения `%name%` в дополнение к `$name` и `${name}`.6970#### `os.path.getatime(path)`7172Возвращает время последнего доступа к *path*. Возвращаемое значение – число, представляющее количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/2.7/library/time.html#module-time)). Возбуждает [`os.error`](https://python-all.ru/2.7/library/os.html#os.error), если файл не существует или недоступен.7374Новое в версии 1.5.2.7576Изменено в версии 2.3: Если [`os.stat_float_times()`](https://python-all.ru/2.7/library/os.html#os.stat_float_times) возвращает `True`, результатом является число с плавающей запятой.7778#### `os.path.getmtime(path)`7980Возвращает время последнего изменения *path*. Возвращаемое значение – число, представляющее количество секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/2.7/library/time.html#module-time)). Возбуждает [`os.error`](https://python-all.ru/2.7/library/os.html#os.error), если файл не существует или недоступен.8182Новое в версии 1.5.2.8384Изменено в версии 2.3: Если [`os.stat_float_times()`](https://python-all.ru/2.7/library/os.html#os.stat_float_times) возвращает `True`, результатом является число с плавающей запятой.8586#### `os.path.getctime(path)`8788Возвращает системное ctime, которое в одних системах (например, Unix) является временем последнего изменения метаданных, а в других (например, Windows) – временем создания для *path*. Возвращаемое значение – число секунд с начала эпохи (см. модуль [`time`](https://python-all.ru/2.7/library/time.html#module-time)). Возбуждает [`os.error`](https://python-all.ru/2.7/library/os.html#os.error), если файл не существует или недоступен.8990Новое в версии 2.3.9192#### `os.path.getsize(path)`9394Возвращает размер в байтах *path*. Возбуждает [`os.error`](https://python-all.ru/2.7/library/os.html#os.error), если файл не существует или недоступен.9596Новое в версии 1.5.2.9798#### `os.path.isabs(path)`99100Возвращает `True`, если *path* является абсолютным именем пути. В Unix это означает, что он начинается с косой черты, в Windows – что он начинается с обратной или косой черты после отбрасывания символа диска.101102#### `os.path.isfile(path)`103104Возвращает `True`, если *путь* является существующим обычным файлом. Функция следует символическим ссылкам, поэтому оба значения [`islink()`](https://python-all.ru/2.7/library/os.path.html#os.path.islink) и [`isfile()`](https://python-all.ru/2.7/library/os.path.html#os.path.isfile) могут быть истинными для одного пути.105106#### `os.path.isdir(path)`107108Возвращает `True`, если *путь* является существующим каталогом. Функция следует символическим ссылкам, поэтому оба значения [`islink()`](https://python-all.ru/2.7/library/os.path.html#os.path.islink) и [`isdir()`](https://python-all.ru/2.7/library/os.path.html#os.path.isdir) могут быть истинными для одного пути.109110#### `os.path.islink(path)`111112Возвращает `True`, если *путь* указывает на запись каталога, являющуюся символической ссылкой. Всегда `False`, если символические ссылки не поддерживаются средой выполнения Python.113114#### `os.path.ismount(path)`115116Возвращает `True`, если имя пути *path* является *точкой монтирования*: точкой в файловой системе, куда смонтирована другая файловая система. Функция проверяет, находится ли родительский каталог *path*, `path/..`, на другом устройстве, чем *path*, или `path/..` и *path* указывают на один и тот же индексный дескриптор на одном устройстве – это позволяет обнаруживать точки монтирования во всех вариантах Unix и POSIX.117118#### `os.path.join(path, *paths)`119120Интеллектуально объединяет один или несколько компонентов пути. Возвращаемое значение представляет собой конкатенацию *path* и любых элементов *\*paths* ровно с одним разделителем каталогов (`os.sep`) после каждой непустой части, кроме последней, то есть результат заканчивается разделителем, только если последняя часть пуста. Если компонент является абсолютным путём, все предыдущие компоненты отбрасываются, и объединение продолжается с этого абсолютного компонента пути.121122В Windows буква диска не сбрасывается при обнаружении абсолютного компонента пути (например, `r'\foo'`). Если компонент содержит букву диска, все предыдущие компоненты отбрасываются, а буква диска сбрасывается. Обратите внимание, что для каждого диска существует текущий каталог, поэтому `os.path.join("c:", "foo")` представляет собой путь относительно текущего каталога на диске `C:` (`c:foo`), а не `c:\foo`.123124#### `os.path.normcase(path)`125126Нормализует регистр символов в пути. В Unix и Mac OS X возвращает путь без изменений; на файловых системах, нечувствительных к регистру, приводит путь к нижнему регистру. В Windows также заменяет прямые слеши на обратные.127128#### `os.path.normpath(path)`129130Нормализует имя пути, удаляя лишние разделители и ссылки на родительский каталог, так что `A//B`, `A/B/`, `A/./B` и `A/foo/../B` все превращаются в `A/B`. Эта строковая операция может изменить значение пути, содержащего символические ссылки. В Windows преобразует прямые косые черты в обратные. Для нормализации регистра используйте [`normcase()`](https://python-all.ru/2.7/library/os.path.html#os.path.normcase).131132#### `os.path.realpath(path)`133134Возвращает канонический путь указанного имени файла, устраняя все символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой).135136Новое в версии 2.2.137138#### `os.path.relpath(path[, start])`139140Возвращает относительный путь к *path* либо от текущего каталога, либо от необязательного стартового каталога *start*. Это вычисление пути: файловая система не используется для подтверждения существования или типа *path* или *start*.141142*start* по умолчанию равен [`os.curdir`](https://python-all.ru/2.7/library/os.html#os.curdir).143144Доступность: Windows, Unix.145146Новое в версии 2.6.147148#### `os.path.samefile(path1, path2)`149150Возвращает `True`, если оба аргумента-имени пути ссылаются на один и тот же файл или каталог (о чём свидетельствуют номер устройства и номер индексного дескриптора). Возбуждает исключение, если вызов [`os.stat()`](https://python-all.ru/2.7/library/os.html#os.stat) для любого из путей завершается ошибкой.151152Доступность: Unix.153154#### `os.path.sameopenfile(fp1, fp2)`155156Возвращает `True`, если файловые дескрипторы *fp1* и *fp2* ссылаются на один и тот же файл.157158Доступность: Unix.159160#### `os.path.samestat(stat1, stat2)`161162Возвращает `True`, если кортежи stat *stat1* и *stat2* ссылаются на один и тот же файл. Эти структуры могли быть возвращены [`os.fstat()`](https://python-all.ru/2.7/library/os.html#os.fstat), [`os.lstat()`](https://python-all.ru/2.7/library/os.html#os.lstat) или [`os.stat()`](https://python-all.ru/2.7/library/os.html#os.stat). Эта функция реализует сравнение, лежащее в основе [`samefile()`](https://python-all.ru/2.7/library/os.path.html#os.path.samefile) и [`sameopenfile()`](https://python-all.ru/2.7/library/os.path.html#os.path.sameopenfile).163164Доступность: Unix.165166#### `os.path.split(path)`167168Разделяет имя пути *path* на пару, `(head, tail)` где *tail* – это последний компонент имени пути, а *head* – все, что ему предшествует. Часть *tail* никогда не содержит косую черту; если *path* заканчивается косой чертой, *tail* будет пуст. Если в *path* нет косой черты, *head* будет пуст. Если *path* пуст, то и *head*, и *tail* пусты. Замыкающие косые черты удаляются из *head*, если только он не является корнем (только одна или несколько косых черт). Во всех случаях `join(head, tail)` возвращает путь к тому же расположению, что и *path* (хотя строки могут различаться). Также см. функции [`dirname()`](https://python-all.ru/2.7/library/os.path.html#os.path.dirname) и [`basename()`](https://python-all.ru/2.7/library/os.path.html#os.path.basename).169170#### `os.path.splitdrive(path)`171172Разделяет имя пути *path* на пару `(drive, tail)`, где *drive* – это либо спецификация диска, либо пустая строка. В системах, не использующих спецификации дисков, *drive* всегда будет пустой строкой. Во всех случаях `drive + tail` будет совпадать с *path*.173174Новое в версии 1.3.175176#### `os.path.splitext(path)`177178Разделяет путь *путь* на пару `(root, ext)` так, что `root + ext == path`, а *ext* является пустой строкой или начинается с точки и содержит не более одной точки. Начальные точки в базовом имени игнорируются; `splitext('.cshrc')` возвращает `('.cshrc', '')`.179180Изменено в версии 2.6: В более ранних версиях мог создаваться пустой корневой каталог, если единственная точка была первым символом.181182#### `os.path.splitunc(path)`183184Разделяет путь *path* на пару `(unc, rest)` так, что *unc* – это точка монтирования UNC (например, `r'\\host\mount'`), если она присутствует, а *rest* – остальная часть пути (например, `r'\path\file.ext'`). Для путей, содержащих буквы дисков, *unc* всегда будет пустой строкой.185186Доступность: Windows.187188#### `os.path.walk(path, visit, arg)`189190Вызывает функцию *visit* с аргументами `(arg, dirname, names)` для каждого каталога в дереве каталогов с корнем в *path* (включая сам *path*, если это каталог). Аргумент *dirname* задаёт посещённый каталог, аргумент *names* перечисляет файлы в каталоге (полученные из `os.listdir(dirname)`). Функция *visit* может изменять *names*, чтобы повлиять на набор каталогов, посещаемых ниже *dirname*, например, чтобы избежать обхода определённых частей дерева. (Объект, на который ссылается *names*, должен изменяться на месте с помощью [`del`](https://python-all.ru/2.7/reference/simple_stmts.html#del) или срезового присваивания.)191192> **Примечание**193>194> Символические ссылки на каталоги не считаются подкаталогами, и поэтому [`walk()`](https://python-all.ru/2.7/library/os.path.html#os.path.walk) не будет их посещать. Чтобы посетить связанные каталоги, необходимо определить их с помощью `os.path.islink(file)` и `os.path.isdir(file)` и при необходимости вызвать [`walk()`](https://python-all.ru/2.7/library/os.path.html#os.path.walk).195196> **Примечание**197>198> Эта функция устарела и удалена в Python 3 в пользу [`os.walk()`](https://python-all.ru/2.7/library/os.html#os.walk).199200#### `os.path.supports_unicode_filenames`201202`True`, если произвольные строки Unicode могут использоваться в качестве имён файлов (с учётом ограничений, накладываемых файловой системой).203204Новое в версии 2.3.205