Ainda não vejo uma resposta viável para o 2.7, que não requer a instalação de dependências adicionais e também começa a partir do diretório do arquivo. Não é bom como uma solução de linha única, mas não há nada de errado em usar os utilitários padrão.
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
E para provar que funciona, começo aqui ~/Documents/notes
apenas para mostrar que o diretório atual não influencia o resultado. Coloquei o arquivo grandpa.py
com esse script em uma pasta chamada "scripts". Ele rasteja até o diretório de documentos e, em seguida, para o diretório do usuário em um 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
Esta é a extrapolação óbvia da resposta para o dir pai . Melhor usar uma solução geral do que uma solução menos adequada em menos linhas.
pathlib
solução é um pouco melhor e mais legível, mas não está incluída no Python 2.7. Eu diria que continue com o que você tem, talvez adicione um comentário.