Eine alternative Lösung von @kender
import os
os.path.dirname(os.path.normpath(yourpath))
Wo yourpath
ist 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 yourpath
um 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.dirname
ist die Funktion dafür, wiea+=5-4
ist 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.