Một giải pháp thay thế của @kender
import os
os.path.dirname(os.path.normpath(yourpath))
Ở đâu yourpath
là con đường bạn muốn cha mẹ cho.
Nhưng giải pháp này không hoàn hảo, vì nó sẽ không xử lý trường hợp yourpath
chuỗi rỗng hoặc dấu chấm.
Giải pháp khác này sẽ xử lý độc đáo hơn trường hợp góc này:
import os
os.path.normpath(os.path.join(yourpath, os.pardir))
Ở đây các đầu ra cho mọi trường hợp có thể tìm thấy (Đường dẫn đầu vào là tương đối):
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)) => '../..'
Đường dẫn đầu vào là tuyệt đối (đường dẫn 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
là chức năng cho việc này, giống nhưa+=5-4
là phức tạp hơna+=1
. Câu hỏi chỉ yêu cầu thư mục cha, không phải là tồn tại hay thư mục mẹ thực sự giả sử các liên kết tượng trưng có được cản trở.