Использование os.path
Чтобы получить родительский каталог каталога, содержащего скрипт (независимо от текущего рабочего каталога), вам нужно использовать __file__
.
Внутри скрипта используйте os.path.abspath(__file__)
для получения абсолютного путь к скрипту и дважды вызовите os.path.dirname
:
from os.path import dirname, abspath
d = dirname(dirname(abspath(__file__))) # /home/kristina/desire-directory
По сути, вы можете подняться по дереву каталогов, вызвав os.path.dirname
столько раз, сколько необходимо. Пример:
In [4]: from os.path import dirname
In [5]: dirname('/home/kristina/desire-directory/scripts/script.py')
Out[5]: '/home/kristina/desire-directory/scripts'
In [6]: dirname(dirname('/home/kristina/desire-directory/scripts/script.py'))
Out[6]: '/home/kristina/desire-directory'
Если вы хотите получить родительский каталог текущего рабочего каталога, используйте os.getcwd
:
import os
d = os.path.dirname(os.getcwd())
Использование библиотеки путей
Вы также можете использовать модуль pathlib
(доступен в Python 3.4 или новее).
Каждый экземпляр pathlib.Path
имеет атрибут parent
, относящийся к родительскому каталогу, а также атрибут parents
, который представляет собой список предков пути. Для получения абсолютного пути можно использовать Path.resolve
. Он также разрешает все символические ссылки, но вместо этого вы можете использовать Path.absolute
, если это нежелательное поведение.
Path(__file__)
и Path()
представляют собой путь к скрипту и текущий рабочий каталог соответственно, поэтому для получения родительского каталога каталога скрипта (независимо от текущего рабочего каталога) вы должны использовать
from pathlib import Path
# `path.parents[1]` is the same as `path.parent.parent`
d = Path(__file__).resolve().parents[1] # Path('/home/kristina/desire-directory')
и получить родительский каталог текущего рабочего каталога
from pathlib import Path
d = Path().resolve().parent
Обратите внимание, что d
— это экземпляр Path
, что не всегда удобно. Вы можете легко преобразовать его в str
, когда вам это нужно:
In [15]: str(d)
Out[15]: '/home/kristina/desire-directory'
person
vaultah
schedule
13.05.2015