os.path – Типовые операции с именами путей¶os.path – Common pathname manipulations
Исходный код: Lib/genericpath.py, Lib/posixpath.py (для POSIX) и Lib/ntpath.py (для Windows).
Этот модуль реализует несколько полезных функций для работы с именами путей. Для чтения или записи файлов обратитесь к open(), а для доступа к файловой системе – к модулю os. Параметры пути могут быть переданы в виде строк, байт или любого объекта, реализующего протокол os.PathLike.
В отличие от оболочки Unix, Python не выполняет автоматического раскрытия путей. Функции, такие как expanduser() и expandvars(), можно вызывать явно, когда приложению требуется раскрытие пути в стиле оболочки. (См. также модуль glob.)
См. также
Модуль pathlib предоставляет высокоуровневые объекты путей.
Примечание
Все эти функции принимают в качестве параметров только объекты байт или только строки. Если возвращается путь или имя файла, результатом будет объект того же типа.
Примечание
Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке есть несколько версий этого модуля. Модуль os.path всегда представляет собой модуль путей, подходящий для операционной системы, на которой выполняется Python, и поэтому пригоден для локальных путей. Однако вы также можете импортировать и использовать отдельные модули, если хотите работать с путём, который всегда находится в одном из этих форматов. Все они имеют одинаковый интерфейс:
posixpathдля путей в стиле UNIXntpathдля путей Windows
Изменено в версии 3.8: exists(), lexists(), isdir(), isfile(), islink() и ismount() теперь возвращают False вместо возбуждения исключения для путей, содержащих символы или байты, непредставимые на уровне ОС.
- os.path.abspath(path)¶
Возвращает нормализованную абсолютную версию пути path. На большинстве платформ это эквивалентно вызову
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(), эта функция возвращает корректный путь.Добавлено в версии 3.5.
Изменено в версии 3.6: Принимает последовательность объектов, подобных путям.
Изменено в версии 3.13: Теперь можно передавать любой итерируемый объект, а не только последовательности.
- 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: Принимает объект, подобный пути.
Устарело с версии 3.15: Устарело в пользу
os.path.commonpath()для префиксов путей. Функцияos.path.commonprefix()признана устаревшей из-за вводящего в заблуждение названия и модуля. Эта функция небезопасна для использования в качестве префиксов путей, несмотря на то, что она включена в модуль для работы с путями, что означает, что её использование может легко привести к случайному внедрению уязвимостей обхода путей в программы на Python.
- 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 указывает на существующий путь, включая битые символические ссылки. Эквивалентноexists()на платформах, где нетos.lstat().Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.expanduser(path)¶
В Unix и Windows возвращает аргумент, в котором начальный компонент
~или~userзаменён на домашний каталог этого пользователя.В Unix начальный
~заменяется на значение переменной окруженияHOME, если она установлена; в противном случае домашний каталог текущего пользователя ищется в базе паролей через встроенный модульpwd. Начальный~userищется напрямую в базе паролей.В Windows будет использоваться
USERPROFILE, если он установлен; в противном случае будет использоваться комбинацияHOMEPATHиHOMEDRIVE. Начальный~userобрабатывается путём проверки, совпадает ли последний компонент каталога домашнего каталога текущего пользователя сUSERNAME, и замены его при совпадении.Если разворачивание не удалось или путь не начинается с тильды, путь возвращается без изменений.
Изменено в версии 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, /)¶
Возвращает системное 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: Принимает объект, подобный пути.
Изменено в версии 3.13: В Windows возвращает
False, если указанный путь начинается ровно с одной (обратной) косой черты.
- os.path.isfile(path)¶
Возвращает
True, если path являетсяexistingобычным файлом. Функция следует по символическим ссылкам, поэтому иislink(), иisfile()могут быть истинны для одного и того же пути.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.isdir(path, /)¶
Возвращает
True, если path являетсяexistingкаталогом. Функция следует по символическим ссылкам, поэтому иislink(), иisdir()могут быть истинны для одного и того же пути.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.isjunction(path)¶
Возвращает
True, если path ссылается наexistingзапись каталога, являющуюся junction (точкой соединения). Всегда возвращаетFalse, если junctions не поддерживаются на текущей платформе.Добавлено в версии 3.12.
- os.path.islink(path)¶
Возвращает
True, если path ссылается наexistingзапись каталога, являющуюся символической ссылкой. ВсегдаFalse, если символические ссылки не поддерживаются средой выполнения Python.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.ismount(path)¶
Возвращает
True, если имя пути path является точкой монтирования: точкой в файловой системе, куда примонтирована другая файловая система. В POSIX функция проверяет, находится ли родительский каталог path,path/.., на другом устройстве, чем path, или указывают лиpath/..и path на один и тот же индексный дескриптор на одном устройстве – это позволяет обнаруживать точки монтирования для всех вариантов Unix и POSIX. Она не может надёжно обнаруживать bind-монтирования в одной файловой системе. В системах Linux она всегда возвращаетTrueдля подтомов btrfs, даже если они не являются точками монтирования. В Windows корневой каталог буквы диска и общая папка UNC всегда являются точками монтирования, а для любого другого пути вызываетсяGetVolumePathName, чтобы проверить, отличается ли он от входного пути.Изменено в версии 3.4: Добавлена поддержка обнаружения не корневых точек монтирования в Windows.
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.isdevdrive(path)¶
Возвращает
True, если имя пути path находится на диске разработчика Windows (Dev Drive). Диск разработчика оптимизирован для сценариев разработки и обеспечивает более высокую производительность при чтении и записи файлов. Рекомендуется для исходного кода, временных каталогов сборки, кешей пакетов и других операций с интенсивным вводом-выводом.Может вызывать ошибку для недопустимого пути, например, без распознаваемого диска, но возвращает
Falseна платформах, не поддерживающих диски разработчика. См. документацию Windows для получения информации о включении и создании дисков разработчика.Добавлено в версии 3.12.
Изменено в версии 3.13: Теперь функция доступна на всех платформах и всегда будет возвращать
Falseна тех, которые не поддерживают диски разработчика.
- os.path.isreserved(path)¶
Возвращает
True, если path является зарезервированным именем пути на текущей системе.В Windows зарезервированные имена файлов включают те, что заканчиваются пробелом или точкой; содержат двоеточия (например, файловые потоки данных вида “name:stream”), символы подстановки (т.е.
'*?"<>'), символ вертикальной черты или управляющие символы ASCII; а также имена DOS-устройств, такие как “NUL”, “CON”, “CONIN$”, “CONOUT$”, “AUX”, “PRN”, “COM1” и “LPT1”.Примечание
Эта функция приблизительно реализует правила для зарезервированных путей в большинстве систем Windows. Эти правила меняются со временем в различных выпусках Windows. Функция может быть обновлена в будущих версиях Python по мере широкого распространения изменений в правилах.
Доступность: Windows.
Добавлено в версии 3.13.
- os.path.join(path, /, *paths)¶
Умно объединяет один или несколько сегментов пути. Возвращаемое значение – это конкатенация path и всех элементов *paths, с ровно одним разделителем каталогов после каждой непустой части, кроме последней. То есть результат будет заканчиваться разделителем только в том случае, если последняя часть пуста или сама заканчивается разделителем.
Если сегмент является абсолютным путём (что в Windows требует указания и диска, и корневого каталога), то все предыдущие сегменты игнорируются, и объединение продолжается с этого абсолютного сегмента. Например, в Linux:
>>> os.path.join('/home/foo', 'bar') '/home/foo/bar' >>> os.path.join('/home/foo', '/home/bar') '/home/bar'
В Windows диск не сбрасывается при обнаружении сегмента с корневым каталогом (например,
r'\foo'). Если сегмент находится на другом диске или является абсолютным путём, все предыдущие сегменты игнорируются, а диск сбрасывается. Например:>>> os.path.join('c:\\', 'foo') 'c:\\foo' >>> os.path.join('c:\\foo', 'd:\\bar') 'd:\\bar'
Обратите внимание, что поскольку для каждого диска существует текущий каталог,
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().Примечание
В системах POSIX, в соответствии с IEEE Std 1003.1 2013 Edition; 4.13 Pathname Resolution, если имя пути начинается ровно с двух косых черт, первый компонент после начальных символов может интерпретироваться способом, определяемым реализацией, хотя более двух начальных символов должны рассматриваться как один символ.
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.realpath(path, /, *, strict=False)¶
Возвращает канонический путь указанного имени файла, устраняя все символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой). В Windows эта функция также разрешает имена в стиле MS-DOS (также называемые 8.3), такие как
C:\\PROGRA~1, вC:\\Program Files.По умолчанию путь вычисляется до первого компонента, который не существует, является циклом символических ссылок или при вычислении которого возникает
OSError. Все такие компоненты добавляются без изменений к существующей части пути.Некоторые ошибки, обрабатываемые таким образом, включают «в доступе отказано», «не каталог» или «неверный аргумент внутренней функции». Таким образом, результирующий путь может отсутствовать или быть недоступным, все еще содержать ссылки или циклы, а также проходить через не-каталоги.
Это поведение можно изменить с помощью именованных аргументов:
Если strict равно
True, первая ошибка, возникшая при вычислении пути, пробрасывается повторно. В частности,FileNotFoundErrorвозбуждается, если path не существует, или другоеOSError, если он недоступен по другой причине. Если strict равноALL_BUT_LAST, последний компонент пути может отсутствовать, но все остальные ошибки возбуждаются.Если strict равен
os.path.ALLOW_MISSING, ошибки, отличные отFileNotFoundError, возбуждаются повторно (как и в случае сstrict=True). Таким образом, возвращаемый путь не будет содержать символических ссылок, но указанный файл и некоторые из его родительских каталогов могут отсутствовать.Примечание
Эта функция эмулирует процедуру операционной системы по приведению пути к каноническому виду, которая немного отличается в Windows и UNIX в отношении того, как взаимодействуют ссылки и последующие компоненты пути.
API операционной системы приводят пути к каноническому виду по мере необходимости, так что обычно нет необходимости вызывать эту функцию.
Изменено в версии 3.6: Принимает объект, подобный пути.
Изменено в версии 3.8: Символические ссылки и точки соединения теперь разрешаются в Windows.
Изменено в версии 3.10: Добавлен параметр strict.
Изменено в версии 3.15: Были добавлены значения
ALL_BUT_LASTиALLOW_MISSINGдля параметра strict.
- os.path.ALL_BUT_LAST¶
Специальное значение, используемое для аргумента strict в
realpath().Добавлено в версии 3.15.
- os.path.ALLOW_MISSING¶
Специальное значение, используемое для аргумента strict в
realpath().Добавлено в версии 3.15.
- os.path.relpath(path, start=os.curdir)¶
Возвращает относительный путь к path либо от текущего каталога, либо от указанного start каталога. Это вычисление пути: файловая система не опрашивается для подтверждения существования или природы path или start. В Windows
ValueErrorвозбуждается, когда path и start находятся на разных дисках.start по умолчанию равен
os.curdir.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.samefile(path1, path2, /)¶
Возвращает
True, если оба указанных пути ссылаются на один и тот же файл или каталог. Это определяется по номеру устройства и номеру индексного дескриптора; возбуждается исключение, если вызовos.stat()для любого из путей завершается ошибкой.Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3.4: Теперь в Windows используется та же реализация, что и на всех остальных платформах.
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.sameopenfile(fp1, fp2)¶
Возвращает
True, если файловые дескрипторы fp1 и fp2 ссылаются на один и тот же файл.Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.samestat(stat1, stat2, /)¶
Возвращает
True, если кортежи stat stat1 и stat2 ссылаются на один и тот же файл. Эти структуры могли быть возвращеныos.fstat(),os.lstat()илиos.stat(). Эта функция реализует сравнение, лежащее в основеsamefile()иsameopenfile().Изменено в версии 3.4: Добавлена поддержка Windows.
- os.path.split(path, /)¶
Разделяет путь path на пару
(head, tail), где tail – последний компонент пути, а head – всё, что ему предшествует. Часть tail никогда не содержит косой черты; если path заканчивается косой чертой, tail будет пустым. Если в path нет косых черт, head будет пустым. Если path пуст, то и head, и tail пусты. Конечные косые черты удаляются из head, если только это не корневой каталог (одна или несколько косых черт). В любом случаеjoin(head, tail)возвращает путь к тому же расположению, что и path (но строки могут различаться). См. также функцииjoin(),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 будет содержать имя узла и общую папку:
>>> splitdrive("//host/computer/dir") ("//host/computer", "/dir")
Изменено в версии 3.6: Принимает объект, подобный пути.
- 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 Разрешение пути). Например:
>>> splitroot('/home/sam') ('', '/', 'home/sam') >>> splitroot('//home/sam') ('', '//', 'home/sam') >>> splitroot('///home/sam') ('', '/', '//home/sam')
В Windows drive может быть пустым, буквой диска, UNC-ресурсом или именем устройства. root может быть пустым, прямой косой чертой или обратной косой чертой. Например:
>>> splitroot('C:/Users/Sam') ('C:', '/', 'Users/Sam') >>> splitroot('//Server/Share/Users/Sam') ('//Server/Share', '/', 'Users/Sam')
Добавлено в версии 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: Принимает объект, подобный пути.
- os.path.supports_unicode_filenames¶
True, если произвольные строки Unicode могут использоваться в качестве имён файлов (с учётом ограничений, накладываемых файловой системой).