Документация Python неофициальный перевод

10.1. os.path – Общие операции с путямиos.path – Common pathname manipulations

Этот модуль реализует несколько полезных функций для работы с путями. Для чтения или записи файлов см. open(), а для доступа к файловой системе – модуль os.

Примечание

В Windows многие из этих функций некорректно работают с UNC-путями. splitunc() и ismount() обрабатывают их правильно.

В отличие от оболочки Unix, Python не выполняет автоматического раскрытия путей. Функции expanduser() и expandvars() можно вызывать явно, если приложению требуется раскрытие путей как в оболочке. (См. также модуль glob.)

Примечание

Поскольку в разных операционных системах разные соглашения об именах путей, в стандартной библиотеке есть несколько версий этого модуля. Модуль os.path всегда представляет собой модуль путей, подходящий для операционной системы, на которой выполняется Python, и поэтому пригоден для локальных путей. Однако вы также можете импортировать и использовать отдельные модули, если хотите работать с путём, который всегда находится в одном из этих форматов. Все они имеют одинаковый интерфейс:

  • posixpath для путей в стиле UNIX

  • ntpath для путей Windows

  • macpath для путей 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() могут быть истинными для одного пути.

Возвращает 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.