Alternatywne rozwiązanie @kender
import os
os.path.dirname(os.path.normpath(yourpath))
gdzie yourpathjest ścieżka, dla której chcesz nadrzędny.
Ale to rozwiązanie nie jest idealne, ponieważ nie poradzi sobie w przypadku, gdy yourpath jest pusty ciąg lub kropka.
To inne rozwiązanie ładniej poradzi sobie z tym narożnym futerałem:
import os
os.path.normpath(os.path.join(yourpath, os.pardir))
Tutaj dane wyjściowe dla każdego znalezionego przypadku (ścieżka wejściowa jest względna):
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)) => '../..'
Ścieżka wejściowa jest bezwzględna (ścieżka systemu 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.dirnamejest funkcją tego, jaka+=5-4jest bardziej skomplikowany niża+=1. Pytanie dotyczyło tylko katalogu nadrzędnego, a nie tego, czy istnieje lub czy prawdziwy katalog nadrzędny, zakładając, że przeszkadzają mu dowiązania symboliczne.