os.path — Общие манипуляции с путями к файлам и каталогам

Исходный код: Lib/posixpath.py (for POSIX) and Lib/ntpath.py (for Windows NT).


Модуль реализует некоторые полезные функции для работы с именами путей к файлам и каталогам. Для чтения или записи файлов см. раздел open(), а для доступа к файловой системе см. модуль os. Параметры пути могут передаваться как строками, так и байтами. Приложениям рекомендуется представлять имена файлов как (Юникод) символьные строки. К сожалению, некоторые имена файлов могут не быть представлены как строки в Unix, поэтому приложения, которым необходимо поддерживать произвольные имена файлов в Unix, должны использовать байты объектов для представления имен путей. Наоборот, использование объектов байтов не может представлять все имена файлов на Windows (в стандартной mbcs кодировке), следовательно приложения Windows должны использовать объекты строки получить доступ ко всем файлам.

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

См.также

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

Примечание

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

Примечание

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

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

Изменено в версии 3.8: exists(), lexists(), isdir(), isfile(), islink() и ismount() теперь возвращает False вместо того, чтобы поднять исключение для путей, которые содержат знаки или байты, непредставимо на уровне ОС.

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 находятся на разных дисках или если paths пуст. В отличие от commonprefix(), этот возвращает действительный путь.

Availability: 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 заменен корневым каталогом того user.

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

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

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

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

Изменено в версии 3.8: Больше не использует HOME в Windows.

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)

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

Изменено в версии 3.6.

os.path.getsize(path)

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

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

os.path.isabs(path)

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

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

os.path.isfile(path)

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

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

os.path.isdir(path)

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

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

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

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

os.path.ismount(path)

Возвращает True, если имя пути path - mount point: точка в файловой системе, где другая файловая система была установлена. На POSIX функция проверяет, является ли родитель path, path/.., на другом устройстве, чем path, или указывают ли path/.. и path на тот же i-узел на том же устройстве —, это должно обнаружить точки монтирования для всего Unix и вариантов POSIX. Он не может надежно обнаружить подключения привязки в той же файловой системе. На 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 преобразуйте все символы пути в строчные, а также преобразуйте прямые косые черты в обратные. В других операционных системах возвращает путь без изменений.

Изменено в версии 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: Принимает путеподобный объект.

Изменено в версии 3.8: Символические связи и соединения теперь разрешены в Windows.

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

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

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

Availability: Unix, Windows.

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

os.path.samefile(path1, path2)

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

Availability: Unix, Windows.

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

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

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

os.path.sameopenfile(fp1, fp2)

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

Availability: Unix, Windows.

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

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

os.path.samestat(stat1, stat2)

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

Availability: 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 sharepoint и относительный путь.

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

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

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

os.path.splitext(path)

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

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

os.path.supports_unicode_filenames

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