Альтернативное решение @kender
import os
os.path.dirname(os.path.normpath(yourpath))
где yourpathпуть, для которого вы хотите, чтобы родитель.
Но это решение не является идеальным, поскольку оно не будет обрабатывать случай, когда yourpathесть пустая строка или точка.
Это другое решение будет лучше обрабатывать этот угловой случай:
import os
os.path.normpath(os.path.join(yourpath, os.pardir))
Вот выходные данные для каждого случая, который можно найти (входной путь является относительным):
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)) => '../..'
Путь ввода является абсолютным (путь 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+=5-4более сложным, чемa+=1. Вопрос задавал только родительский каталог, не существует ли он или истинный родительский каталог, предполагая, что символические ссылки мешают.