Eine alternative Lösung von @kender
import os
os.path.dirname(os.path.normpath(yourpath))
Wo yourpathist der Pfad, für den Sie das übergeordnete Element haben möchten?
Diese Lösung ist jedoch nicht perfekt, da sie nicht den Fall behandelt, in dem es sich yourpathum eine leere Zeichenfolge oder einen Punkt handelt.
Diese andere Lösung wird diesen Eckfall besser handhaben:
import os
os.path.normpath(os.path.join(yourpath, os.pardir))
Hier die Ausgänge für jeden Fall, der gefunden werden kann (Eingabepfad ist relativ):
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)) => '../..'
Der Eingabepfad ist absolut (Linux-Pfad):
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.dirnameist die Funktion dafür, wiea+=5-4ist komplizierter alsa+=1. Bei der Frage wurde nur das übergeordnete Verzeichnis angefordert, nicht, ob es vorhanden ist, oder das wahre übergeordnete Verzeichnis, sofern symbolische Links im Weg stehen.