os.path — Общие манипуляции с именами путей
Исходный код: Lib/posixpath.py (для POSIX) и Lib/ntpath.py (для Windows).
Этот модуль реализует некоторые полезные функции для работы с именами путей. Для чтения или записи файлов см. open(), а для доступа к файловой системе см. модуль os. Параметры пути могут быть переданы в виде строк, байтов или любого объекта, реализующего протокол os.PathLike.
В отличие от оболочки 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 пусто. В отличие отcommonprefix(), это возвращает допустимый путь.Доступность: 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, заменённым домашним каталогом пользователя.В 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: Принимает объект-путь.
-
os.path.isfile(path) -
Возвращает
True, если path — обычный файлexisting. Это учитывает символические ссылки, поэтому иislink(), иisfile()могут быть истинными для одного и того же пути.Изменено в версии 3.6: Принимает объект-путь.
-
os.path.isdir(path) -
Возвращает
True, если path — каталогexisting. Это учитывает символические ссылки, поэтому иislink(), иisdir()могут быть истинными для одного и того же пути.Изменено в версии 3.6: Принимает объект-путь.
-
os.path.islink(path) -
Возвращает
True, если path ссылается на запись каталогаexisting, которая является символической ссылкой. ВсегдаFalse, если символические ссылки не поддерживаются средой выполнения Python.Изменено в версии 3.6: Принимает объект-путь.
-
os.path.ismount(path) -
Возвращает
True, если путь path является точкой монтирования: точкой в файловой системе, где смонтирована другая файловая система. В POSIX функция проверяет, находится ли родительский каталог path,path/.., на другом устройстве, чем path, или жеpath/..и path указывают на один и тот же узел i на одном и том же устройстве — это должно обнаруживать точки монтирования для всех вариантов Unix и POSIX. Она не может надежно обнаруживать монтирования по связям на той же файловой системе. В Windows корень буквы диска и UNC-совместный ресурс всегда являются точками монтирования, и для любого другого пути вызываетсяGetVolumePathName, чтобы проверить, отличается ли он от входного пути.Введено в версии 3.4: Поддержка обнаружения точек монтирования, отличных от корня, в Windows.
Изменено в версии 3.6: Принимает объект-путь.
-
os.path.join(path, *paths) -
Интеллектуально объединяет один или несколько сегментов пути. Возвращаемое значение — конкатенация path и всех членов *paths с ровно одним разделителем каталогов после каждой ненулевой части, за исключением последней. То есть, результат будет заканчиваться разделителем только если последняя часть пустая или заканчивается разделителем. Если сегмент является абсолютным путем (в Windows это требует и буквы диска, и корня), то все предыдущие сегменты игнорируются, и объединение продолжается с сегмента абсолютного пути.
В 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().Примечание
В системах POSIX, в соответствии с IEEE Std 1003.1 2013 Edition; 4.13 Pathname Resolution, если имя пути начинается ровно с двух косых черт, первый компонент после лидирующих символов может интерпретироваться определенным образом реализации, хотя более двух лидирующих символов обрабатываются как один символ.
Изменено в версии 3.6: Принимает объект-путь.
-
os.path.realpath(path, *, strict=False) -
Возвращает канонический путь указанного файла, устраняя любые символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой).
Если путь не существует или встречается цикл символических ссылок, и strict равен
True, поднимается исключениеOSError. Если strict равенFalse, путь разрешается насколько это возможно, а любой остаток добавляется без проверки его существования.Примечание
Эта функция эмулирует процедуру операционной системы для получения канонического пути, которая немного отличается между Windows и UNIX в отношении того, как ссылки и последующие компоненты пути взаимодействуют.
API операционной системы делают пути каноническими по мере необходимости, поэтому обычно нет необходимости вызывать эту функцию.
Изменено в версии 3.6: Принимает объект-путь.
Изменено в версии 3.8: Символические ссылки и ссылки на соединения теперь разрешаются в Windows.
Изменено в версии 3.10: Добавлен параметр strict.
-
os.path.relpath(path, start=os.curdir) -
Возвращает относительный путь к path, либо из текущей директории, либо из необязательной директории start. Это вычисление пути: доступ к файловой системе не производится для проверки существования или характера path или start. В Windows, при path и start на разных дисках, поднимается исключение
ValueError.start по умолчанию равен
os.curdir.Доступность: Unix, Windows.
Изменено в версии 3.6: Принимает объект-путь.
-
os.path.samefile(path1, path2) -
Возвращает
True, если оба аргумента пути указывают на один и тот же файл или директорию. Это определяется по номеру устройства и узлу i-ноды, и поднимает исключение, если вызовos.stat()по любому пути терпит неудачу.Доступность: Unix, Windows.
Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3.4: Windows теперь использует ту же реализацию, что и все остальные платформы.
Изменено в версии 3.6: Принимает объект-путь.
-
os.path.sameopenfile(fp1, fp2) -
Возвращает
True, если дескрипторы файлов fp1 и fp2 ссылаются на один и тот же файл.Доступность: Unix, Windows.
Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3.6: Принимает объект-путь.
-
os.path.samestat(stat1, stat2) -
Возвращает
True, если кортежи stat stat1 и stat2 ссылаются на один и тот же файл. Эти структуры могут быть возвращены функциямиos.fstat(),os.lstat()илиos.stat(). Эта функция реализует основное сравнение, используемое функциямиsamefile()иsameopenfile().Доступность: 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 и относительный путь.
Если путь содержит букву диска, drive будет содержать все символы до и включая двоеточие:
>>> splitdrive("c:/dir") ("c:", "/dir")Если путь содержит UNC-путь, drive будет содержать имя хоста и общий ресурс, до, но не включая, четвёртый разделитель:
>>> splitdrive("//host/computer/dir") ("//host/computer", "/dir")Изменено в версии 3.6: Принимает объект-путь.
-
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 могут использоваться в качестве имён файлов (в рамках ограничений, налагаемых файловой системой).
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/os.path.html