Uma solução alternativa do @kender
import os
os.path.dirname(os.path.normpath(yourpath))
onde yourpath
está o caminho para o qual você deseja os pais.
Mas essa solução não é perfeita, pois não trata do caso em que yourpath
há uma string vazia ou um ponto.
Esta outra solução irá lidar mais bem com este caso de canto:
import os
os.path.normpath(os.path.join(yourpath, os.pardir))
Aqui as saídas para todos os casos que podem ser encontrados (o caminho de entrada é relativo):
os.path.dirname(os.path.normpath('a/b/')) => 'a'
os.path.normpath(os.path.join('a/b/', os.pardir)) => 'a'
os.path.dirname(os.path.normpath('a/b')) => 'a'
os.path.normpath(os.path.join('a/b', os.pardir)) => 'a'
os.path.dirname(os.path.normpath('a/')) => ''
os.path.normpath(os.path.join('a/', os.pardir)) => '.'
os.path.dirname(os.path.normpath('a')) => ''
os.path.normpath(os.path.join('a', os.pardir)) => '.'
os.path.dirname(os.path.normpath('.')) => ''
os.path.normpath(os.path.join('.', os.pardir)) => '..'
os.path.dirname(os.path.normpath('')) => ''
os.path.normpath(os.path.join('', os.pardir)) => '..'
os.path.dirname(os.path.normpath('..')) => ''
os.path.normpath(os.path.join('..', os.pardir)) => '../..'
O caminho de entrada é absoluto (caminho do Linux):
os.path.dirname(os.path.normpath('/a/b')) => '/a'
os.path.normpath(os.path.join('/a/b', os.pardir)) => '/a'
os.path.dirname(os.path.normpath('/a')) => '/'
os.path.normpath(os.path.join('/a', os.pardir)) => '/'
os.path.dirname(os.path.normpath('/')) => '/'
os.path.normpath(os.path.join('/', os.pardir)) => '/'
os.path.dirname
é a função para isso, comoa+=5-4
é mais complicado do quea+=1
. A pergunta solicitou apenas o diretório pai, não se existe ou o diretório pai verdadeiro , assumindo que os links simbólicos atrapalham.