Я пока не вижу жизнеспособного ответа для 2.7, который не требует установки дополнительных зависимостей и также запускается из каталога файлов. Это нехорошо как однострочное решение, но в использовании стандартных утилит нет ничего плохого.
import os
grandparent_dir = os.path.abspath(
os.path.join(
os.path.join(
os.path.dirname(
os.path.abspath(__file__)
),
os.pardir
),
os.pardir
)
)
print grandparent_dir
И чтобы доказать, что это работает, я начинаю с ~/Documents/notes
того, чтобы показать, что текущий каталог не влияет на результат. Я положил файл grandpa.py
с этим сценарием в папку с названием "scripts". Он выполняет сканирование до каталога Documents, а затем до каталога пользователя на Mac.
(testing)AlanSE-OSX:notes AlanSE$ echo ~/Documents/scripts/grandpa.py
/Users/alancoding/Documents/scripts/grandpa.py
(testing)AlanSE-OSX:notes AlanSE$ python2.7 ~/Documents/scripts/grandpa.py
/Users/alancoding
Это очевидная экстраполяция ответа на родительский каталог . Лучше использовать общее решение, чем менее хорошее решение в меньшем количестве строк.
pathlib
Решение немного лучше и более удобным для чтения, но не входит в Python 2.7. Я бы сказал, придерживайтесь того, что у вас есть, может быть, добавьте комментарий.