Une solution alternative de @kender
import os
os.path.dirname(os.path.normpath(yourpath))
où yourpath
est le chemin pour lequel vous voulez que le parent.
Mais cette solution n'est pas parfaite, car elle ne gérera pas le cas où se yourpath
trouve une chaîne vide ou un point.
Cette autre solution gérera mieux ce cas d'angle:
import os
os.path.normpath(os.path.join(yourpath, os.pardir))
Voici les sorties pour chaque cas qui peut trouver (le chemin d'entrée est relatif):
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)) => '../..'
Le chemin d'entrée est absolu (chemin 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
est la fonction pour cela, commea+=5-4
est plus compliquée quea+=1
. La question demandait seulement le répertoire parent, pas s'il existe ou le vrai répertoire parent en supposant que les liens symboliques gênent.