os.path
— Общие манипуляции с путевыми именами¶
Исходный код: Lib/posixpath.py ( для POSIX) и Lib/ntpath.py (для Windows).
Этот модуль реализует некоторые полезные функции для имен путей. Для чтения или записи файлов см. раздел open()
, а для доступа к файловой системе - модуль os
. Параметры пути могут передаваться в виде строк, байтов или любого другого объекта, реализующего протокол os.PathLike
.
В отличие от оболочки Unix, Python не выполняет никаких автоматических расширений пути. Такие функции, как expanduser()
и expandvars()
, могут быть вызваны явно, когда приложение желает расширения пути, подобного оболочке. (Смотрите также модуль glob
.)
См.также
Модуль pathlib
предлагает высокоуровневые объекты path.
Примечание
Все эти функции принимают в качестве параметров либо только байтовые, либо только строковые объекты. Результатом будет объект того же типа, если будет возвращен путь или имя файла.
Примечание
Поскольку разные операционные системы используют разные соглашения об именах путей, в стандартной библиотеке существует несколько версий этого модуля. Модуль os.path
всегда является модулем пути, подходящим для операционной системы, в которой запущен Python, и, следовательно, пригодным для локальных путей. Однако вы также можете импортировать и использовать отдельные модули, если хотите манипулировать путем, который всегда отображается в одном из различных форматов. Все они имеют одинаковый интерфейс:
posixpath
для путей в стиле UNIXntpath
для путей Windows
Изменено в версии 3.8: exists()
, lexists()
, isdir()
, isfile()
, islink()
, и ismount()
теперь возвращает False
вместо того, чтобы вызывать исключение для путей, которые содержат символы или байты, непредставимые на уровне операционной системы.
- os.path.abspath(path)¶
Возвращает нормализованную абсолютизированную версию пути path. На большинстве платформ это эквивалентно вызову функции
normpath()
следующим образом:normpath(join(os.getcwd(), path))
.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.basename(path)¶
Возвращает базовое имя pathname путь. Это второй элемент пары, возвращаемый при передаче пути функции
split()
. Обратите внимание, что результат работы этой функции отличается от результата работы программы Unix basename; где basename для'/foo/bar/'
возвращает'bar'
, функцияbasename()
возвращает пустую строку (''
).Изменено в версии 3.6: Принимает значение path-like object.
- os.path.commonpath(paths)¶
Возвращает самый длинный общий подпутешествие для каждого имени пути в последовательности paths. Поднимите
ValueError
если paths содержит как абсолютные, так и относительные имена путей, то paths находятся на разных дисках или если paths пуст. В отличие отcommonprefix()
, это возвращает допустимый путь.Availability: Unix, Windows.
Добавлено в версии 3.5.
Изменено в версии 3.6: Принимает последовательность path-like objects.
- 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: Принимает значение path-like object.
- os.path.dirname(path)¶
Возвращает имя каталога pathname path. Это первый элемент из пары, возвращаемый при передаче path функции
split()
.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.exists(path)¶
Возвращает
True
, если path ссылается на существующий путь или открытый файловый дескриптор. ВозвращаетFalse
для неработающих символьных ссылок. На некоторых платформах эта функция может возвращатьFalse
, если не получено разрешение на выполнениеos.stat()
для запрошенного файла, даже если физически существует путь.Изменено в версии 3.3: путь теперь может быть целым числом:
True
возвращается, если это дескриптор открытого файла,False
в противном случае.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.lexists(path)¶
Возвращает
True
, если path ссылается на существующий путь. ВозвращаетTrue
для неработающих символьных ссылок. Эквивалентноexists()
на платформах, где отсутствуетos.lstat()
.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.expanduser(path)¶
В Unix и Windows возвращайте аргумент с начальным компонентом
~
или~user
, замененным на домашний каталог этого пользователя.В Unix начальный
~
заменяется переменной окруженияHOME
, если она задана; в противном случае домашний каталог текущего пользователя ищется в каталоге паролей с помощью встроенного модуляpwd
. Инициал~user
ищется непосредственно в каталоге паролей.В Windows будет использоваться значение
USERPROFILE
, если оно задано, в противном случае будет использоваться комбинация значенийHOMEPATH
иHOMEDRIVE
. Начальный~user
обрабатывается путем проверки соответствия последнего компонента каталога домашнего каталога текущего пользователяUSERNAME
и замены его, если это так.Если расширение завершается ошибкой или если путь начинается не с тильды, путь возвращается без изменений.
Изменено в версии 3.6: Принимает значение path-like object.
Изменено в версии 3.8: Больше не используется
HOME
в Windows.
- os.path.expandvars(path)¶
Возвращает аргумент с развернутыми переменными среды. Подстроки вида
$name
или${name}
заменяются значением переменной среды name. Неправильно сформированные имена переменных и ссылки на несуществующие переменные остаются без изменений.В Windows поддерживаются расширения
%name%
в дополнение к$name
и${name}
.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.getatime(path)¶
Возвращает время последнего доступа к path. Возвращаемое значение представляет собой число с плавающей запятой, указывающее количество секунд, прошедших с момента начала периода (см. модуль
time
). Поднимите значениеOSError
, если файл не существует или недоступен.
- os.path.getmtime(path)¶
Возвращает время последнего изменения параметра path. Возвращаемое значение представляет собой число с плавающей запятой, указывающее количество секунд, прошедших с момента перехода (см. модуль
time
). Поднимите значениеOSError
, если файл не существует или недоступен.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.getctime(path)¶
Возвращает системное время, которое в некоторых системах (например, Unix) является временем последнего изменения метаданных, а в других (например, Windows) - временем создания path. Возвращаемое значение - это число, указывающее количество секунд, прошедших с момента создания (см. модуль
time
). ПоднимитеOSError
, если файл не существует или недоступен.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.getsize(path)¶
Возвращает размер файла path в байтах. Увеличьте значение
OSError
, если файл не существует или недоступен.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.isabs(path)¶
Возвращает
True
, если path является абсолютным именем пути. В Unix это означает, что оно начинается с косой черты, в Windows - с обратной косой черты после отсечения потенциальной буквы диска.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.isfile(path)¶
Возвращает
True
, если path являетсяexisting
обычным файлом. Это следует за символическими ссылками, поэтому иislink()
, иisfile()
могут быть истинными для одного и того же пути.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.isdir(path)¶
Возвращает
True
, если path является каталогомexisting
. Это следует за символическими ссылками, поэтому иislink()
, иisdir()
могут быть истинными для одного и того же пути.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.islink(path)¶
Возвращает
True
, если path ссылается наexisting
запись каталога, которая является символьной ссылкой. ВсегдаFalse
, если символьные ссылки не поддерживаются средой выполнения Python.Изменено в версии 3.6: Принимает значение path-like object.
- os.path.ismount(path)¶
Возвращает
True
, если путь path равен mount point: точка в файловой системе, где была смонтирована другая файловая система. В POSIX функция проверяет, находится ли родительский элемент path,path/..
, на другом устройстве, чем path, или жеpath/..
и path указывают на один и тот же i-узел на одном устройстве - это должен обнаруживать точки монтирования для всех вариантов Unix и POSIX. Он не может надежно определить, подключается ли bind к одной и той же файловой системе. В Windows буква диска root и общий UNC всегда являются точками подключения, и для любого другого пути вызываетсяGetVolumePathName
, чтобы проверить, отличается ли он от входного пути.Добавлено в версии 3.4: Поддержка обнаружения некорневых точек подключения в Windows.
Изменено в версии 3.6: Принимает значение path-like object.
- os.path.join(path, *paths)¶
Разумно объедините один или несколько сегментов пути. Возвращаемое значение представляет собой объединение path и всех элементов *paths, причем после каждой непустой части, за исключением последней, следует ровно один разделитель каталогов. То есть результат будет заканчиваться разделителем только в том случае, если последняя часть либо пуста, либо заканчивается разделителем. Если сегмент является абсолютным путем (для чего в Windows требуется как диск, так и root), то все предыдущие сегменты игнорируются, и соединение продолжается с сегмента абсолютного пути.
В Windows диск не сбрасывается при обнаружении сегмента корневого пути (например,
r'\foo'
). Если сегмент находится на другом диске или является абсолютным путем, все предыдущие сегменты игнорируются и диск сбрасывается. Обратите внимание, что, поскольку для каждого диска существует текущий каталог,os.path.join("c:", "foo")
представляет собой путь относительно текущего каталога на дискеC:
(c:foo
), а неc:\foo
.Изменено в версии 3.6: Принимает значение path-like object для path и путей.
- os.path.normcase(path)¶
Нормализуйте регистр имени пути. В Windows преобразуйте все символы в имени пути в нижний регистр, а также преобразуйте прямые косые черты в обратные. В других операционных системах верните путь без изменений.
Изменено в версии 3.6: Принимает значение path-like object.
- os.path.normpath(path)¶
Нормализуйте путь, сворачивая избыточные разделители и ссылки более высокого уровня, чтобы
A//B
,A/B/
,A/./B
иA/foo/../B
все сталиA/B
. Эта манипуляция со строками может изменить значение пути, содержащего символьные ссылки. В Windows он преобразует прямые косые черты в обратные. Для нормализации регистра используйтеnormcase()
.Примечание
В системах POSIX, в соответствии с IEEE Std 1003.1 2013 Edition; 4.13 Pathname Resolution, если имя пути начинается ровно с двух косых черт, первый компонент, следующий за начальными символами, может интерпретироваться определенным реализацией образом, хотя более двух начальных символов должны рассматриваться как один символ.
Изменено в версии 3.6: Принимает значение path-like object.
- os.path.realpath(path, *, strict=False)¶
Возвращает канонический путь к указанному имени файла, исключая любые символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой).
Если путь не существует или встречается цикл символических ссылок, и вызывается strict is
True
,OSError
. Если strict равноFalse
, путь разрешается, насколько это возможно, и любой остаток добавляется без проверки того, существует ли он.Примечание
Эта функция эмулирует процедуру создания канонического пути в операционной системе, которая немного отличается в Windows и UNIX в отношении взаимодействия ссылок и последующих компонентов пути.
API-интерфейсы операционной системы делают пути каноническими по мере необходимости, поэтому обычно нет необходимости вызывать эту функцию.
Изменено в версии 3.6: Принимает значение path-like object.
Изменено в версии 3.8: Символические ссылки и переходы теперь разрешены в Windows.
Изменено в версии 3.10: Был добавлен параметр strict.
- os.path.relpath(path, start=os.curdir)¶
Возвращает относительный путь к файлу path либо из текущего каталога, либо из необязательного каталога start. Это вычисление пути: доступ к файловой системе не осуществляется для подтверждения существования или природы path или start. В Windows значение
ValueError
возникает, когда path и start находятся на разных дисках.start по умолчанию имеет значение
os.curdir
.Availability: Unix, Windows.
Изменено в версии 3.6: Принимает значение path-like object.
- os.path.samefile(path1, path2)¶
Возвращает
True
, если оба аргумента pathname ссылаются на один и тот же файл или каталог. Это определяется номером устройства и индексным индексом и вызывает исключение, если вызовos.stat()
для любого из путей завершается ошибкой.Availability: Unix, Windows.
Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3.4: Windows теперь использует ту же реализацию, что и все другие платформы.
Изменено в версии 3.6: Принимает значение path-like object.
- os.path.sameopenfile(fp1, fp2)¶
Возвращает
True
, если файловые дескрипторы fp1 и fp2 ссылаются на один и тот же файл.Availability: Unix, Windows.
Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3.6: Принимает значение path-like object.
- os.path.samestat(stat1, stat2)¶
Возвращает
True
, если кортежи stat stat1 и stat2 ссылаются на один и тот же файл. Эти структуры могли быть возвращены с помощьюos.fstat()
,os.lstat()
, илиos.stat()
. Эта функция реализует базовое сравнение, используемое вsamefile()
иsameopenfile()
.Availability: Unix, Windows.
Изменено в версии 3.4: Добавлена поддержка Windows.
Изменено в версии 3.6: Принимает значение path-like object.
- 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: Принимает значение path-like object.
- 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: Принимает значение path-like object.
- os.path.splitext(path)¶
Разделите имя пути path на пару
(root, ext)
таким образом, чтобыroot + ext == path
, а расширение ext было пустым или начиналось с точки и содержало не более одной точки.Если путь не содержит расширения, ext будет иметь значение
''
:>>> splitext('bar') ('bar', '')
Если путь содержит расширение, то для этого расширения будет задано значение ext, включая начальную точку. Обратите внимание, что предыдущие периоды будут проигнорированы:
>>> splitext('foo.bar.exe') ('foo.bar', '.exe') >>> splitext('/foo/bar.exe') ('/foo/bar', '.exe')
Начальные точки последнего компонента пути считаются частью корня:
>>> splitext('.cshrc') ('.cshrc', '') >>> splitext('/foo/....jpg') ('/foo/....jpg', '')
Изменено в версии 3.6: Принимает значение path-like object.
- os.path.supports_unicode_filenames¶
True
если в качестве имен файлов могут использоваться произвольные строки в Юникоде (в пределах ограничений, налагаемых файловой системой).