Я ще не бачу життєздатної відповіді на 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
із цим сценарієм у папку "сценарії". Він переповзає до папки "Документи", а потім до папки користувача на 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. Я б сказав, дотримуйтесь того, що у вас є, можливо, додайте коментар.