os.path
— Общие манипуляции с именами путей¶
Исходный код: Lib/genericpath.py, 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()
, возвращается корректный путь.Added in version 3.5.
Изменено в версии 3.6: Принимает последовательность path-like objects.
Изменено в версии 3.13: Теперь можно передавать любые итерируемые переменные, а не только последовательности.
- os.path.commonprefix(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)¶
Возвращает имя каталога, содержащего имя пути 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 ссылается на существующий путь, включая неработающие символические ссылки. Эквивалентно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: В Windows больше не используется
HOME
.
- 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) - временем создания path. Возвращаемое значение - число, показывающее количество секунд, прошедших с момента эпохи (см. модуль
time
). ВызываетOSError
, если файл не существует или недоступен.Изменено в версии 3.6: Принимает path-like object.
- os.path.getsize(path)¶
Возвращает размер пути в байтах. Возвращает
OSError
, если файл не существует или недоступен.Изменено в версии 3.6: Принимает path-like object.
- os.path.isabs(path)¶
Возвращает
True
, если path - это абсолютное имя пути. В Unix это означает, что он начинается со слеша, в Windows - что он начинается с двух (обратных) слешей, или с буквы диска, двоеточия и (обратного) слеша вместе.Изменено в версии 3.6: Принимает path-like object.
Изменено в версии 3.13: В Windows возвращает
False
, если заданный путь начинается ровно с одного (обратного) слеша.
- 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.isjunction(path)¶
Возвращает
True
, если path ссылается на запись каталогаexisting
, которая является перекрестком. Всегда возвращаетFalse
, если перекрестки не поддерживаются на текущей платформе.Added in version 3.12.
- 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.isdevdrive(path)¶
Возвращает
True
, если имя пути path находится на диске Windows Dev Drive. Диск Dev Drive оптимизирован для сценариев разработчика и обеспечивает более высокую производительность при чтении и записи файлов. Его рекомендуется использовать для исходного кода, временных каталогов сборки, кэша пакетов и других операций, требующих большого объема ввода-вывода.Может выдать ошибку при неверном пути, например, при отсутствии распознаваемого диска, но возвращает
False
на платформах, не поддерживающих накопители Dev Drives. Информацию о включении и создании накопителей Dev Drives см. в разделе the Windows documentation.Added in version 3.12.
Изменено в версии 3.13: Функция теперь доступна на всех платформах, и всегда будет возвращать
False
на тех, где нет поддержки Dev Drives.
- os.path.isreserved(path)¶
Возвращает
True
, если path является зарезервированным именем пути в текущей системе.В Windows к зарезервированным именам файлов относятся те, которые заканчиваются пробелом или точкой; те, которые содержат двоеточия (например, файловые потоки типа «имя:поток»), символы подстановки (например,
'*?"<>'
), трубы или управляющие символы ASCII; а также имена устройств DOS, такие как «NUL», «CON», «CONIN$», «CONOUT$», «AUX», «PRN», «COM1» и «LPT1».Примечание
Эта функция приближенно описывает правила резервирования путей в большинстве систем Windows. Эти правила меняются со временем в различных выпусках Windows. Эта функция может быть обновлена в будущих выпусках Python по мере появления изменений в правилах.
Availability: Windows.
Added in version 3.13.
- os.path.join(path, *paths)¶
Интеллектуальное объединение одного или нескольких сегментов пути. Возвращаемое значение представляет собой конкатенацию path и всех членов *paths, причем за каждой непустой частью, кроме последней, следует ровно один разделитель каталогов. То есть результат будет заканчиваться разделителем только в том случае, если последняя часть либо пуста, либо заканчивается разделителем. Если сегмент является абсолютным путем (что в Windows требует наличия диска и корня), то все предыдущие сегменты игнорируются, и соединение продолжается с сегмента абсолютного пути.
В 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)¶
Возвращает канонический путь к указанному имени файла, устраняя все встречающиеся в пути символические ссылки (если они поддерживаются операционной системой). В Windows эта функция также разрешает имена в стиле MS-DOS (также называемые 8.3), такие как
C:\\PROGRA~1
вC:\\Program Files
.Если путь не существует или встречается цикл симлинка, а 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. Это вычисление пути: обращение к файловой системе для подтверждения существования или природы path или start не производится. В Windows значение
ValueError
выдается, если path и start находятся на разных дисках.Значение start по умолчанию равно
os.curdir
.Изменено в версии 3.6: Принимает path-like object.
- os.path.samefile(path1, path2)¶
Возвращает
True
, если оба аргумента pathname ссылаются на один и тот же файл или каталог. Это определяется номером устройства и номером i-узла и вызывает исключение, если вызовos.stat()
для любого из имен путей не удался.Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3.4: В Windows теперь используется та же реализация, что и на всех остальных платформах.
Изменено в версии 3.6: Принимает path-like object.
- os.path.sameopenfile(fp1, fp2)¶
Возвращает
True
, если дескрипторы файлов fp1 и fp2 ссылаются на один и тот же файл.Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3.6: Принимает path-like object.
- os.path.samestat(stat1, stat2)¶
Возвращает
True
, если кортежи stat1 и stat2 относятся к одному и тому же файлу. Эти структуры могли быть возвращены функциямиos.fstat()
,os.lstat()
илиos.stat()
. Эта функция реализует базовое сравнение, используемоеsamefile()
иsameopenfile()
.Изменено в версии 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.splitroot(path)¶
Разделите имя пути path на кортеж из трех элементов
(drive, root, tail)
, где drive - это имя устройства или точка монтирования, root - это строка разделителей после диска, а tail - это все, что находится после корня. Любой из этих элементов может быть пустой строкой. Во всех случаяхdrive + root + tail
будет тем же, что и path.В POSIX-системах drive всегда пуст. Корень root может быть пустым (если path относительный), одним прямым слешем (если path абсолютный) или двумя прямыми слешами (определяется реализацией по IEEE Std 1003.1-2017; 4.13 Pathname Resolution). Например:
>>> splitroot('/home/sam') ('', '/', 'home/sam') >>> splitroot('//home/sam') ('', '//', 'home/sam') >>> splitroot('///home/sam') ('', '/', '//home/sam')
В Windows drive может быть пустым, буквенным именем диска, общим ресурсом UNC или именем устройства. Корень* может быть пустым, прямым или обратным слешем. Например:
>>> splitroot('C:/Users/Sam') ('C:', '/', 'Users/Sam') >>> splitroot('//Server/Share/Users/Sam') ('//Server/Share', '/', 'Users/Sam')
Added in version 3.12.
- 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 (в пределах ограничений, накладываемых файловой системой).