os.path
— Общие манипуляции с именами путей¶
Исходный код: Lib/posixpath.py (для POSIX) и Lib/ntpath.py (для Windows).
Этот модуль реализует некоторые полезные функции для работы с именами путей. Для чтения или записи файлов смотрите open()
, а для доступа к файловой системе смотрите модуль os
. Параметры пути могут быть переданы в виде строк, байтов или любого объекта, реализующего протокол os.PathLike
.
В отличие от оболочки unix, Python не делает никаких автоматических расширений пути. Такие функции, как expanduser()
и expandvars()
, могут быть вызваны явно, когда приложению требуется расширение пути, подобное shell. (См. также модуль glob
).
См.также
Модуль pathlib
предлагает высокоуровневые объекты пути.
Примечание
Все эти функции принимают в качестве параметров либо только байты, либо только строковые объекты. Результатом является объект того же типа, если возвращается путь или имя файла.
Примечание
Поскольку в разных операционных системах используются разные соглашения об именах путей, в стандартной библиотеке существует несколько версий этого модуля. Модуль 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)¶ Возвращает базовое имя имени пути path. Это второй элемент пары, возвращаемой при передаче path в функцию
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)¶ Возвращает самый длинный префикс пути (взятый посимвольно), который является префиксом всех путей в списке. Если список пуст, возвращается пустая строка (
''
).Примечание
Эта функция может возвращать недопустимые пути, поскольку работает по одному символу за раз. Чтобы получить правильный путь, смотрите
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)¶ Возвращает имя каталога имени пути path. Это первый элемент пары, возвращаемой при передаче path в функцию
split()
.Изменено в версии 3.6: Принимает path-like object.
-
os.path.
exists
(path)¶ Возвращает
True
, если path ссылается на существующий путь или открытый дескриптор файла. ВозвращаетFalse
для нарушенных символических ссылок. На некоторых платформах эта функция может возвращатьFalse
, если не дано разрешение на выполнениеos.stat()
на запрошенном файле, даже если путь физически существует.Изменено в версии 3.3: path теперь может быть целым числом:
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)¶ Возвращает системное время ctime, которое в некоторых системах (например, Unix) является временем последнего изменения метаданных, а в других (например, Windows) - временем создания пути. Возвращаемое значение - число, показывающее количество секунд с момента эпохи (см. модуль
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. Он не способен надежно обнаружить связывание монтирований в одной и той же файловой системе. В Windows буква диска root и общий ресурс UNC всегда являются точками монтирования, а для любого другого пути вызываетсяGetVolumePathName
, чтобы проверить, отличается ли он от входного пути.Добавлено в версии 3.4: Поддержка обнаружения не корневых точек монтирования в Windows.
Изменено в версии 3.6: Принимает path-like object.
-
os.path.
join
(path, *paths)¶ Интеллектуальное объединение одного или нескольких компонентов пути. Возвращаемое значение представляет собой конкатенацию path и любых членов *paths с ровно одним разделителем каталогов после каждой непустой части, кроме последней, что означает, что результат будет заканчиваться разделителем, только если последняя часть пуста. Если компонент является абсолютным путем, все предыдущие компоненты отбрасываются, и объединение продолжается с компонента абсолютного пути.
В Windows буква диска не сбрасывается, когда встречается компонент абсолютного пути (например,
r'\foo'
). Если компонент содержит букву диска, все предыдущие компоненты отбрасываются и буква диска сбрасывается. Обратите внимание, что поскольку для каждого диска существует свой текущий каталог,os.path.join("c:", "foo")
представляет собой путь относительно текущего каталога на дискеC:
(c:foo
), а неc:\foo
.Изменено в версии 3.6: Принимает path-like object для path и paths.
-
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 равно
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. Это вычисление пути: к файловой системе не обращаются для подтверждения существования или природы пути или начала. В Windows, если путь и начало находятся на разных дисках, возникает ошибка
ValueError
.По умолчанию start имеет значение
os.curdir
.Availability: Unix, Windows.
Изменено в версии 3.6: Принимает path-like object.
-
os.path.
samefile
(path1, path2)¶ Возвращает
True
, если оба аргумента pathname ссылаются на один и тот же файл или каталог. Это определяется по номеру устройства и номеру i-узла и вызывает исключение, если вызов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 будет пустым. Если в пути нет слеша, то голова будет пустой. Если путь пуст, то и голова, и хвост будут пусты. Слэши в конце строки 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
если в качестве имен файлов можно использовать произвольные строки Unicode (в рамках ограничений, накладываемых файловой системой).