10.1. os.path – Общие операции с путями¶os.path – Common pathname manipulations
Этот модуль реализует несколько полезных функций для работы с путями. Для чтения или
записи файлов см. open(), а для доступа к файловой системе –
модуль os.
Примечание
В Windows многие из этих функций некорректно работают с UNC-путями.
splitunc() и ismount() обрабатывают их правильно.
В отличие от оболочки Unix, Python не выполняет автоматического раскрытия путей.
Функции expanduser() и expandvars() можно вызывать явно, если приложению требуется раскрытие путей как в оболочке. (См. также модуль glob.)
Примечание
Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке есть несколько версий этого модуля. Модуль os.path всегда представляет собой модуль путей, подходящий для операционной системы, на которой выполняется Python, и поэтому пригоден для локальных путей. Однако вы также можете импортировать и использовать отдельные модули, если хотите работать с путём, который всегда находится в одном из этих форматов. Все они имеют одинаковый интерфейс:
posixpathдля путей в стиле UNIXntpathдля путей Windowsmacpathдля путей MacOS старого стиляos2emxpathдля путей OS/2 EMX
-
os.path.abspath(path)¶ Возвращает нормализованную абсолютную версию имени пути path. На большинстве платформ это эквивалентно вызову функции
normpath()следующим образом:normpath(join(os.getcwd(), path)).Новое в версии 1.5.2.
-
os.path.basename(path)¶ Возвращает базовое имя пути path. Это второй элемент пары, возвращаемой при передаче path функции
split(). Обратите внимание, что результат этой функции отличается от программы Unix basename; если basename для'/foo/bar/'возвращает'bar', то функцияbasename()возвращает пустую строку ('').
-
os.path.commonprefix(list)¶ Возвращает самый длинный общий префикс путей (посимвольно), который является префиксом всех путей в list. Если list пуст, возвращает пустую строку (
''). Обратите внимание: результат может быть некорректным путём, поскольку сравнение выполняется посимвольно.
-
os.path.dirname(path)¶ Возвращает имя каталога пути path. Это первый элемент пары, возвращаемой при передаче path функции
split().
-
os.path.exists(path)¶ Возвращает
True, если path указывает на существующий путь. ВозвращаетFalseдля битых символических ссылок. На некоторых платформах эта функция может вернутьFalse, если нет разрешения на выполнениеos.stat()для указанного файла, даже если path физически существует.
-
os.path.lexists(path)¶ Возвращает
True, если path указывает на существующий путь. ВозвращаетTrueдля битых символических ссылок. Эквивалентexists()на платформах безos.lstat().Новое в версии 2.4.
-
os.path.expanduser(path)¶ В Unix и Windows возвращает аргумент, в котором начальный компонент
~или~userзаменён на домашний каталог этого пользователя.В Unix начальный
~заменяется на значение переменной окруженияHOME, если она установлена; в противном случае домашний каталог текущего пользователя ищется в базе паролей через встроенный модульpwd. Начальный~userищется напрямую в базе паролей.В Windows
HOMEиUSERPROFILEиспользуются, если они заданы; в противном случае используется комбинацияHOMEPATHиHOMEDRIVE. Начальный~userобрабатывается путём удаления последнего компонента каталога из созданного выше пути пользователя.Если разворачивание не удалось или путь не начинается с тильды, путь возвращается без изменений.
-
os.path.expandvars(path)¶ Возвращает аргумент с развёрнутыми переменными окружения. Подстроки вида
$nameили${name}заменяются значением переменной окружения name. Некорректные имена переменных и ссылки на несуществующие переменные остаются без изменений.В Windows поддерживаются расширения
%name%в дополнение к$nameи${name}.
-
os.path.getatime(path)¶ Возвращает время последнего доступа к path. Возвращаемое значение – число, представляющее количество секунд с начала эпохи (см. модуль
time). Возбуждаетos.error, если файл не существует или недоступен.Новое в версии 1.5.2.
Изменено в версии 2.3: Если
os.stat_float_times()возвращаетTrue, результатом является число с плавающей запятой.
-
os.path.getmtime(path)¶ Возвращает время последнего изменения path. Возвращаемое значение – число, представляющее количество секунд с начала эпохи (см. модуль
time). Возбуждаетos.error, если файл не существует или недоступен.Новое в версии 1.5.2.
Изменено в версии 2.3: Если
os.stat_float_times()возвращаетTrue, результатом является число с плавающей запятой.
-
os.path.getctime(path)¶ Возвращает системное ctime, которое в одних системах (например, Unix) является временем последнего изменения метаданных, а в других (например, Windows) – временем создания для path. Возвращаемое значение – число секунд с начала эпохи (см. модуль
time). Возбуждаетos.error, если файл не существует или недоступен.Новое в версии 2.3.
-
os.path.getsize(path)¶ Возвращает размер в байтах path. Возбуждает
os.error, если файл не существует или недоступен.Новое в версии 1.5.2.
-
os.path.isabs(path)¶ Возвращает
True, если path является абсолютным именем пути. В Unix это означает, что он начинается с косой черты, в Windows – что он начинается с обратной или косой черты после отбрасывания символа диска.
-
os.path.isfile(path)¶ Возвращает
True, если путь является существующим обычным файлом. Функция следует символическим ссылкам, поэтому оба значенияislink()иisfile()могут быть истинными для одного пути.
-
os.path.isdir(path)¶ Возвращает
True, если путь является существующим каталогом. Функция следует символическим ссылкам, поэтому оба значенияislink()иisdir()могут быть истинными для одного пути.
-
os.path.islink(path)¶ Возвращает
True, если путь указывает на запись каталога, являющуюся символической ссылкой. ВсегдаFalse, если символические ссылки не поддерживаются средой выполнения Python.
-
os.path.ismount(path)¶ Возвращает
True, если имя пути path является точкой монтирования: точкой в файловой системе, куда смонтирована другая файловая система. Функция проверяет, находится ли родительский каталог path,path/.., на другом устройстве, чем path, илиpath/..и path указывают на один и тот же индексный дескриптор на одном устройстве – это позволяет обнаруживать точки монтирования во всех вариантах Unix и POSIX.
-
os.path.join(path, *paths)¶ Интеллектуально объединяет один или несколько компонентов пути. Возвращаемое значение представляет собой конкатенацию path и любых элементов *paths ровно с одним разделителем каталогов (
os.sep) после каждой непустой части, кроме последней, то есть результат заканчивается разделителем, только если последняя часть пуста. Если компонент является абсолютным путём, все предыдущие компоненты отбрасываются, и объединение продолжается с этого абсолютного компонента пути.В Windows буква диска не сбрасывается при обнаружении абсолютного компонента пути (например,
r'\foo'). Если компонент содержит букву диска, все предыдущие компоненты отбрасываются, а буква диска сбрасывается. Обратите внимание, что для каждого диска существует текущий каталог, поэтомуos.path.join("c:", "foo")представляет собой путь относительно текущего каталога на дискеC:(c:foo), а неc:\foo.
-
os.path.normcase(path)¶ Нормализует регистр символов в пути. В Unix и Mac OS X возвращает путь без изменений; на файловых системах, нечувствительных к регистру, приводит путь к нижнему регистру. В Windows также заменяет прямые слеши на обратные.
-
os.path.normpath(path)¶ Нормализует имя пути, удаляя лишние разделители и ссылки на родительский каталог, так что
A//B,A/B/,A/./BиA/foo/../Bвсе превращаются вA/B. Эта строковая операция может изменить значение пути, содержащего символические ссылки. В Windows преобразует прямые косые черты в обратные. Для нормализации регистра используйтеnormcase().
-
os.path.realpath(path)¶ Возвращает канонический путь указанного имени файла, устраняя все символические ссылки, встречающиеся в пути (если они поддерживаются операционной системой).
Новое в версии 2.2.
-
os.path.relpath(path[, start])¶ Возвращает относительный путь к path либо от текущего каталога, либо от необязательного стартового каталога start. Это вычисление пути: файловая система не используется для подтверждения существования или типа path или start.
start по умолчанию равен
os.curdir.Доступность: Windows, Unix.
Новое в версии 2.6.
-
os.path.samefile(path1, path2)¶ Возвращает
True, если оба аргумента-имени пути ссылаются на один и тот же файл или каталог (о чём свидетельствуют номер устройства и номер индексного дескриптора). Возбуждает исключение, если вызовos.stat()для любого из путей завершается ошибкой.Доступность: Unix.
-
os.path.sameopenfile(fp1, fp2)¶ Возвращает
True, если файловые дескрипторы fp1 и fp2 ссылаются на один и тот же файл.Доступность: Unix.
-
os.path.samestat(stat1, stat2)¶ Возвращает
True, если кортежи stat stat1 и stat2 ссылаются на один и тот же файл. Эти структуры могли быть возвращеныos.fstat(),os.lstat()илиos.stat(). Эта функция реализует сравнение, лежащее в основеsamefile()иsameopenfile().Доступность: Unix.
-
os.path.split(path)¶ Разделяет имя пути path на пару,
(head, tail)где tail – это последний компонент имени пути, а head – все, что ему предшествует. Часть tail никогда не содержит косую черту; если path заканчивается косой чертой, tail будет пуст. Если в path нет косой черты, head будет пуст. Если path пуст, то и head, и tail пусты. Замыкающие косые черты удаляются из head, если только он не является корнем (только одна или несколько косых черт). Во всех случаяхjoin(head, tail)возвращает путь к тому же расположению, что и path (хотя строки могут различаться). Также см. функцииdirname()иbasename().
-
os.path.splitdrive(path)¶ Разделяет имя пути path на пару
(drive, tail), где drive – это либо спецификация диска, либо пустая строка. В системах, не использующих спецификации дисков, drive всегда будет пустой строкой. Во всех случаяхdrive + tailбудет совпадать с path.Новое в версии 1.3.
-
os.path.splitext(path)¶ Разделяет путь путь на пару
(root, ext)так, чтоroot + ext == path, а ext является пустой строкой или начинается с точки и содержит не более одной точки. Начальные точки в базовом имени игнорируются;splitext('.cshrc')возвращает('.cshrc', '').Изменено в версии 2.6: В более ранних версиях мог создаваться пустой корневой каталог, если единственная точка была первым символом.
-
os.path.splitunc(path)¶ Разделяет путь path на пару
(unc, rest)так, что unc – это точка монтирования UNC (например,r'\\host\mount'), если она присутствует, а rest – остальная часть пути (например,r'\path\file.ext'). Для путей, содержащих буквы дисков, unc всегда будет пустой строкой.Доступность: Windows.
-
os.path.walk(path, visit, arg)¶ Вызывает функцию visit с аргументами
(arg, dirname, names)для каждого каталога в дереве каталогов с корнем в path (включая сам path, если это каталог). Аргумент dirname задаёт посещённый каталог, аргумент names перечисляет файлы в каталоге (полученные изos.listdir(dirname)). Функция visit может изменять names, чтобы повлиять на набор каталогов, посещаемых ниже dirname, например, чтобы избежать обхода определённых частей дерева. (Объект, на который ссылается names, должен изменяться на месте с помощьюdelили срезового присваивания.)Примечание
Символические ссылки на каталоги не считаются подкаталогами, и поэтому
walk()не будет их посещать. Чтобы посетить связанные каталоги, необходимо определить их с помощьюos.path.islink(file)иos.path.isdir(file)и при необходимости вызватьwalk().Примечание
Эта функция устарела и удалена в Python 3 в пользу
os.walk().
-
os.path.supports_unicode_filenames¶ True, если произвольные строки Unicode могут использоваться в качестве имён файлов (с учётом ограничений, накладываемых файловой системой).Новое в версии 2.3.