os.path

Содержание
Введение
abspath
basename
Все методы path
dirname
exists
isdir
isfile
join
realpath
split
splitext
Похожие статьи

Введение

os.path.abspath()

Абсолютный путь до файла можно получить с помощью abspath()

import os print(os.path.abspath(__file__))

C:\Users\Andrei\openapi\yaml_to_json.py

os.path.basename()

Получить из пути до файла только имя файла можно с помощью basename()

import os print(os.path.basename("C:\Users\Andrei\openapi.yaml"))

openapi.yaml

Все доступные методы

Список всех атрибутов и методов os.path можно получить с помощью функции dir()

print(dir(os.path))

['__all__', '__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_get_sep', '_joinrealpath', '_path_normpath', '_varprog', '_varprogb', 'abspath', 'altsep', 'basename', 'commonpath', 'commonprefix', 'curdir', 'defpath', 'devnull', 'dirname', 'exists', 'expanduser', 'expandvars', 'extsep', 'genericpath', 'getatime', 'getctime', 'getmtime', 'getsize', 'isabs', 'isdir', 'isfile', 'islink', 'ismount', 'join', 'lexists', 'normcase', 'normpath', 'os', 'pardir', 'pathsep', 'realpath', 'relpath', 'samefile', 'sameopenfile', 'samestat', 'sep', 'split', 'splitdrive', 'splitext', 'stat', 'supports_unicode_filenames', 'sys']

os.path.dirname()

Имя директории, в которой находится файл можно получить с помощью dirname

Например, если нужно получить директорию, в которой находится используемый Python можно выполнить

import os import sys print(os.path.dirname(sys.executable)

'C:\Users\ao\AppData\Local\Programs\Python\Python312\python.exe'

Рассмотрим примеры, когда нужно получить путь до директории с файлом из проекта, например с настройками проекта config.toml

|-- config.toml `-- dirname_ex.py

import os print(os.path.dirname("./config.toml"))

python dirname_ex.py

.

Обсудим разницу между dirname() и os.getcwd()

os `-- dirname_demo |-- lib | |-- config.toml | `-- utils.py `-- test `-- test.py

Директорию os добавим в PYTHONPATH чтобы сделать подобие пакета

cd /c/Users/ao/os
export PYTHONPATH=$(pwd)
echo $PYTHONPATH

/c/Users/ao/os

Функция demo() из файла utils.py будет выводить os.path.dirname() и os.getcwd()

Аргументом os.path.dirname() будет атрибут __file__ про который можно прочитать здесь .

Обратите внимание на то, что utils.py и config.toml находятся в одной директории, а test.py расположен в соседней.

import os def demo(): for path in ["config.toml", __file__]: print(f"os.path.dirname('{path}'):") print(f"PATH: {os.path.dirname(path)}") print(f"CWD : {os.getcwd()}") if __name__ == "__main__": print("utils.py direct call") else: print("utils.py called from other module") demo()

Всё, что делает test.py это импорт utils.py

import dirname.lib.utils

Если вызвать utils.py напрямую из dirname_demo то:

Путь до файла config.toml не будет найден,

os.path.dirname(__file__) укажет на директорию lib

getcwd() на директорию dirname_demo из которой был вызван скрипт.

python lib/utils.py

utils.py direct call os.path.dirname('config.toml'): PATH: os.path.dirname('C:\Users\ao\os\dirname_demo\lib\utils.py'): PATH: C:\Users\ao\os\dirname_demo\lib CWD : C:\Users\ao\os\dirname_demo

В случае если utils.py вызван напрямую из lib то:

Путь до файла config.toml всё равно не будет найден,

os.path.dirname(__file__) укажет на директорию lib

getcwd() тоже на директорию lib так как скрипт теперь вызван оттуда. Важно понимать, что это совпадение носит частный характер.

python utils.py

utils.py direct call os.path.dirname('config.toml'): PATH: os.path.dirname('C:\Users\ao\os\dirname_demo\lib\utils.py'): PATH: C:\Users\ao\os\dirname_demo\lib CWD : C:\Users\ao\os\dirname_demo\lib

Если запустить test.py то os.path.dirname(__file__) укажет на директорию lib

getcwd() на директорию test так как скрипт теперь вызван оттуда.

python test.py

utils.py called from other module os.path.dirname('config.toml'): PATH: os.path.dirname('C:\Users\ao\os\dirname_demo\lib\utils.py'): PATH: C:\Users\ao\os\dirname_demo\lib CWD : C:\Users\ao\os\dirname_demo\test

Теперь предположим, что utils.py работает с config.py А вызвается utils.py из test.py

Чтобы стабильно получать путь до config.toml нужно воспользоваться os.path.dirname(__file__) и os.path.join()

# utils.py import os def demo(): filename = "config.toml" file_path = os.path.join(os.path.dirname(__file__), filename) print(file_path) if __name__ == "__main__": print("utils.py direct call") else: print("utils.py called from other module") demo()

Теперь независимо от того откуда вызвается demo() путь до файла с конфигом находится одинакого.

python utils.py

utils.py direct call C:\Users\ao\os\dirname_demo\lib\config.toml

python test.py

utils.py called from other module C:\Users\ao\os\dirname_demo\lib\config.toml

Изучить применение os.path.dirname() для чтения конфигурационных файлов можно в статье «Python configparser»

os.path.exists()

Проверить существует ли путь поможет exists().

Альтернативный способ этой проверки - использовать Path.exists() из библиотеки pathlib

sandbox |-- exists_demo.py `-- real.txt

import os print(os.path.exists("real.txt")) print(os.path.exists("missing.txt"))

python exists_demo.py

True False

os.path.isdir()

isdir() помогает определить является ли файл директорией

Если вы работаете c файлами в Linux рекомендую прочитать эту статью

sandbox |-- directory | `-- nested.txt |-- is_dir_demo.py `-- real.txt

import os print(os.path.isdir("real.txt")) print(os.path.isdir("directory"))

python is_dir_demo.py

False True

os.path.isfile()

isfile() помогает определить является файл обычным файлом смогут

Если вы работаете c файлами в Linux рекомендую прочитать эту статью

sandbox |-- directory | `-- nested.txt |-- is_file_demo.py `-- real.txt

import os print(os.path.isfile("real.txt")) print(os.path.isfile("directory"))

python is_file_demo.py

True False

Практический пример применения isfile вы можете изучить в статье shutil

Banner image

os.path.join()

os.path.join() избавляет от необходимости думать о том нужно ли ставить слеш в путь или нет, а также какой именно слеш ставить в зависимости от ОС.

Пример применения os.path.join() вы можете изучить в статье shutil

Ещё один пример применения os.path() вы можете изучить также в статье «Пакеты в Python»

import os file_path = os.path.join(os.environ.get("HOME"), "test.txt") print(file_path) with open(file_path, "w") as f: f.write("")

python os_path_ex.py

/home/andrei/test.txt

Проверим, что файл создан в домашней директории.

ls ~

test.txt

У path довольно обширный функционал.

import os file_path = os.path.join(os.environ.get("HOME"), "test.txt") print(os.path.basename(file_path))

test.txt

os.path.realpath()

Полный путь до файла можно получить с помощью realpath

demo/ |-- config.toml `-- realpath_ex.py

import os print(os.path.realpath("./config.toml"))

python realpath_ex.py

C:\Users\AO\demo\config.toml

os.path.split()

Отделить имя файла от полного пути поможет split, а splitext отделит расширение файла от всего остального.

import os print(os.path.split(file_path)) print(os.path.splitext(file_path))

('/home/andrei', 'test.txt') ('/home/andrei/test', '.txt')

Article author: Andrei Olegovich

Похожие статьи
Основы Python
Python
Установка Python
ООП в Python
Функции
docstring
#!: Shebang
Объекты
os
pathlib
Сложности при работе с Python

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: