有人能告诉我如何在Python中跨平台获取路径的父目录吗?如。
C:\Program Files ---> C:\
and
C:\ ---> C:\
如果目录没有父目录,则返回目录本身。这个问题似乎很简单,但我无法从谷歌中找到它。
有人能告诉我如何在Python中跨平台获取路径的父目录吗?如。
C:\Program Files ---> C:\
and
C:\ ---> C:\
如果目录没有父目录,则返回目录本身。这个问题似乎很简单,但我无法从谷歌中找到它。
当前回答
查找当前工作目录的父目录。
import pathlib
pathlib.Path().resolve().parent
其他回答
获取父目录路径并创建新目录(名称为new_dir)
获取父目录路径
os.path.abspath('..')
os.pardir
示例1
import os
print os.makedirs(os.path.join(os.path.dirname(__file__), os.pardir, 'new_dir'))
示例2
import os
print os.makedirs(os.path.join(os.path.dirname(__file__), os.path.abspath('..'), 'new_dir'))
只是在Tung的答案中添加了一些东西(如果你在unix机器上,你需要使用rstrip('/')来更安全)。
>>> input1 = "../data/replies/"
>>> os.path.dirname(input1.rstrip('/'))
'../data'
>>> input1 = "../data/replies"
>>> os.path.dirname(input1.rstrip('/'))
'../data'
但是,如果你不使用rstrip('/'),给定你的输入是
>>> input1 = "../data/replies/"
将输出,
>>> os.path.dirname(input1)
'../data/replies'
这可能不是你所看到的,因为你想要两者。/data/replies/" and "../data/回复“以同样的方式表现。
import os
p = os.path.abspath('..')
C:\Program Files——> C:\\\
C:\\\
@kender的另一个解决方案
import os
os.path.dirname(os.path.normpath(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)) => '/'
Python 3.4
使用pathlib模块。
from pathlib import Path
path = Path("/here/your/path/file.txt")
print(path.parent.absolute())
旧的答案
试试这个:
import os
print os.path.abspath(os.path.join(yourpath, os.pardir))
你的路径就是你想要父路径的路径。