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

os.path – Типовые операции с именами путейos.path – Common pathname manipulations

Исходный код: Lib/posixpath.py (для POSIX), Lib/ntpath.py (для Windows NT), и Lib/macpath.py (для Macintosh)


Этот модуль реализует несколько полезных функций для работы с путями. Для чтения или записи файлов см. open(), а для доступа к файловой системе – модуль os. Параметры пути могут передаваться как строки (str) или байты (bytes). Приложениям рекомендуется представлять имена файлов в виде строк (Unicode). К сожалению, некоторые имена файлов в Unix невозможно представить в виде строк, поэтому приложениям, которым требуется поддержка произвольных имён файлов в Unix, следует использовать объекты bytes для представления путей. И наоборот: с помощью объектов bytes нельзя представить все имена файлов в Windows (в стандартной кодировке mbcs), поэтому приложения Windows должны использовать строковые объекты для доступа ко всем файлам.

В отличие от оболочки Unix, Python не выполняет автоматического раскрытия путей. Функции expanduser() и expandvars() можно вызывать явно, если приложению требуется раскрытие путей как в оболочке. (См. также модуль glob.)

См. также

Модуль pathlib предоставляет высокоуровневые объекты путей.

Примечание

Все эти функции принимают в качестве параметров только объекты байт или только строки. Если возвращается путь или имя файла, результатом будет объект того же типа.

Примечание

Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке есть несколько версий этого модуля. Модуль os.path всегда представляет собой модуль путей, подходящий для операционной системы, на которой выполняется Python, и поэтому пригоден для локальных путей. Однако вы также можете импортировать и использовать отдельные модули, если хотите работать с путём, который всегда находится в одном из этих форматов. Все они имеют одинаковый интерфейс:

  • posixpath для путей в стиле UNIX

  • ntpath для путей Windows

  • macpath для путей MacOS старого стиля

os.path.abspath(path)

Возвращает нормализованную абсолютную версию имени пути path. На большинстве платформ это эквивалентно вызову функции normpath() следующим образом: normpath(join(os.getcwd(), path)).

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.basename(path)

Возвращает базовое имя пути path. Это второй элемент пары, возвращаемой при передаче path функции split(). Обратите внимание, что результат этой функции отличается от программы Unix basename; если basename для '/foo/bar/' возвращает 'bar', то функция basename() возвращает пустую строку ('').

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.commonpath(paths)

Возвращает самый длинный общий подпуть каждого пути в последовательности paths. Вызывает ValueError, если paths содержит как абсолютные, так и относительные пути, или если paths пуст. В отличие от commonprefix(), возвращает корректный путь.

Доступность: Unix, Windows.

Новое в версии 3.5.

Изменено в версии 3.6: Принимает последовательность объектов, подобных путям.

os.path.commonprefix(list)

Возвращает самый длинный префикс пути (по одному символу), который является префиксом всех путей в list. Если list пуст, возвращается пустая строка ('').

Примечание

Эта функция может возвращать некорректные пути, так как она работает по одному символу за раз. Чтобы получить корректный путь, см. commonpath().

>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'

>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.dirname(path)

Возвращает имя каталога пути path. Это первый элемент пары, возвращаемой при передаче path функции split().

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.exists(path)

Возвращает True, если path указывает на существующий путь или открытый файловый дескриптор. Возвращает False для битых символических ссылок. На некоторых платформах эта функция может вернуть False, если нет разрешения на выполнение os.stat() для запрошенного файла, даже если path физически существует.

Изменено в версии 3.3: path теперь может быть целым числом: возвращается True, если это открытый файловый дескриптор, и False в противном случае.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.lexists(path)

Возвращает True, если path указывает на существующий путь. Возвращает True для битых символических ссылок. Эквивалент exists() на платформах без os.lstat().

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.expanduser(path)

В Unix и Windows возвращает аргумент, в котором начальный компонент ~ или ~user заменён на домашний каталог этого пользователя.

В Unix начальный ~ заменяется на значение переменной окружения HOME, если она установлена; в противном случае домашний каталог текущего пользователя ищется в базе паролей через встроенный модуль pwd. Начальный ~user ищется напрямую в базе паролей.

В Windows HOME и USERPROFILE используются, если они заданы; в противном случае используется комбинация HOMEPATH и HOMEDRIVE. Начальный ~user обрабатывается путём удаления последнего компонента каталога из созданного выше пути пользователя.

Если разворачивание не удалось или путь не начинается с тильды, путь возвращается без изменений.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.expandvars(path)

Возвращает аргумент с развёрнутыми переменными окружения. Подстроки вида $name или ${name} заменяются значением переменной окружения name. Некорректные имена переменных и ссылки на несуществующие переменные остаются без изменений.

В Windows поддерживаются расширения %name% в дополнение к $name и ${name}.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.getatime(path)

Возвращает время последнего доступа к path. Возвращаемое значение – число с плавающей запятой, представляющее количество секунд с начала эпохи (см. модуль time). Вызывает OSError, если файл не существует или недоступен.

os.path.getmtime(path)

Возвращает время последнего изменения path. Возвращаемое значение – число с плавающей запятой, представляющее количество секунд с начала эпохи (см. модуль time). Вызывает OSError, если файл не существует или недоступен.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.getctime(path)

Возвращает системное ctime, которое в одних системах (например, Unix) является временем последнего изменения метаданных, а в других (например, Windows) – временем создания для path. Возвращаемое значение – число секунд с начала эпохи (см. модуль time). Возбуждает OSError, если файл не существует или недоступен.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.getsize(path)

Возвращает размер в байтах path. Возбуждает OSError, если файл не существует или недоступен.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.isabs(path)

Возвращает True, если path является абсолютным именем пути. В Unix это означает, что он начинается с косой черты, в Windows – что он начинается с обратной или косой черты после отбрасывания символа диска.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.isfile(path)

Возвращает True, если path является existing обычным файлом. Функция следует по символическим ссылкам, поэтому и islink(), и isfile() могут быть истинны для одного и того же пути.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.isdir(path)

Возвращает True, если path является existing каталогом. Функция следует по символическим ссылкам, поэтому и islink(), и isdir() могут быть истинны для одного и того же пути.

Изменено в версии 3.6: Принимает объект, подобный пути.

Возвращает True, если path ссылается на existing запись каталога, являющуюся символической ссылкой. Всегда False, если символические ссылки не поддерживаются средой выполнения Python.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.ismount(path)

Возвращает True, если имя пути path является точкой монтирования: точкой в файловой системе, куда смонтирована другая файловая система. В POSIX функция проверяет, находится ли родительская директория path, path/.., на другом устройстве, чем path, или указывают ли path/.. и path на один и тот же i-node на одном устройстве – это должно обнаруживать точки монтирования для всех вариантов Unix и POSIX. Функция не может надежно обнаруживать bind-монтирования в одной файловой системе. В Windows корень диска (буква диска) и UNC-пути общего доступа всегда являются точками монтирования, а для любого другого пути вызывается GetVolumePathName, чтобы проверить, отличается ли он от исходного пути.

Новое в версии 3.4: Поддержка обнаружения точек монтирования, не являющихся корневыми, в Windows.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.join(path, *paths)

Интеллектуально объединяет один или несколько компонентов пути. Возвращаемое значение представляет собой конкатенацию path и любых элементов *paths ровно с одним разделителем каталогов (os.sep) после каждой непустой части, кроме последней, то есть результат заканчивается разделителем, только если последняя часть пуста. Если компонент является абсолютным путём, все предыдущие компоненты отбрасываются, и объединение продолжается с этого абсолютного компонента пути.

В Windows буква диска не сбрасывается при обнаружении абсолютного компонента пути (например, r'\foo'). Если компонент содержит букву диска, все предыдущие компоненты отбрасываются, а буква диска сбрасывается. Обратите внимание, что для каждого диска существует текущий каталог, поэтому os.path.join("c:", "foo") представляет собой путь относительно текущего каталога на диске C: (c:foo), а не c:\foo.

Изменено в версии 3.6: Теперь принимает объект, подобный пути для path и paths.

os.path.normcase(path)

Нормализует регистр символов пути. В Windows преобразует все символы пути в нижний регистр, а также заменяет косые черты на обратные. В других операционных системах возвращает путь без изменений. Вызывает TypeError, если тип path не является str или bytes (напрямую или косвенно через интерфейс os.PathLike).

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.normpath(path)

Нормализует имя пути, удаляя лишние разделители и ссылки на родительский каталог, так что A//B, A/B/, A/./B и A/foo/../B все превращаются в A/B. Эта строковая операция может изменить значение пути, содержащего символические ссылки. В Windows преобразует прямые косые черты в обратные. Для нормализации регистра используйте normcase().

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.realpath(path)

Возвращает канонический путь указанного имени файла, устраняя все символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой).

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.relpath(path, start=os.curdir)

Возвращает относительный путь к path либо от текущего каталога, либо от необязательного стартового каталога start. Это вычисление пути: файловая система не используется для подтверждения существования или типа path или start.

start по умолчанию равен os.curdir.

Доступность: Unix, Windows.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.samefile(path1, path2)

Возвращает True, если оба указанных пути ссылаются на один и тот же файл или каталог. Это определяется по номеру устройства и номеру индексного дескриптора; возбуждается исключение, если вызов os.stat() для любого из путей завершается ошибкой.

Доступность: Unix, Windows.

Изменено в версии 3.2: Добавлена поддержка Windows.

Изменено в версии 3.4: Теперь в Windows используется та же реализация, что и на всех остальных платформах.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.sameopenfile(fp1, fp2)

Возвращает True, если файловые дескрипторы fp1 и fp2 ссылаются на один и тот же файл.

Доступность: Unix, Windows.

Изменено в версии 3.2: Добавлена поддержка Windows.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.samestat(stat1, stat2)

Возвращает True, если кортежи stat stat1 и stat2 ссылаются на один и тот же файл. Эти структуры могли быть возвращены os.fstat(), os.lstat() или os.stat(). Эта функция реализует сравнение, лежащее в основе samefile() и sameopenfile().

Доступность: Unix, Windows.

Изменено в версии 3.4: Добавлена поддержка Windows.

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.split(path)

Разделяет имя пути path на пару, (head, tail) где tail – это последний компонент имени пути, а head – все, что ему предшествует. Часть tail никогда не содержит косую черту; если path заканчивается косой чертой, tail будет пуст. Если в path нет косой черты, head будет пуст. Если path пуст, то и head, и tail пусты. Замыкающие косые черты удаляются из head, если только он не является корнем (только одна или несколько косых черт). Во всех случаях join(head, tail) возвращает путь к тому же расположению, что и path (хотя строки могут различаться). Также см. функции dirname() и basename().

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.splitdrive(path)

Разделяет путь path на пару (drive, tail), где drive – либо точка монтирования, либо пустая строка. В системах, не использующих спецификации дисков, drive всегда будет пустой строкой. В любом случае drive + tail будет тем же, что и path.

В Windows разделяет путь на диск/UNC-ресурс и относительный путь.

Если путь содержит букву диска, drive будет содержать всё до двоеточия включительно. Например, splitdrive("c:/dir") возвращает ("c:", "/dir")

Если путь содержит UNC-путь, drive будет содержать имя узла и общую папку (share) до четвёртого разделителя, не включая его. Например, splitdrive("//host/computer/dir") возвращает ("//host/computer", "/dir")

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.splitext(path)

Разделяет путь путь на пару (root, ext) так, что root + ext == path, а ext является пустой строкой или начинается с точки и содержит не более одной точки. Начальные точки в базовом имени игнорируются; splitext('.cshrc') возвращает ('.cshrc', '').

Изменено в версии 3.6: Принимает объект, подобный пути.

os.path.supports_unicode_filenames

True, если произвольные строки Unicode могут использоваться в качестве имён файлов (с учётом ограничений, накладываемых файловой системой).