110

是否有类似的东西os.path.dirname(path),但在 pathlib 中?

4

2 回答 2

176

看起来有一个parents元素包含给定路径的所有父目录。例如,如果你开始:

>>> import pathlib
>>> p = pathlib.Path('/path/to/my/file')

然后p.parents[0]是包含的目录file

>>> p.parents[0]
PosixPath('/path/to/my')

...并且p.parents[1]将是下一个目录:

>>> p.parents[1]
PosixPath('/path/to')

等等。

p.parent是另一种索取方式p.parents[0]。您可以将 aPath转换为字符串并获得几乎您所期望的:

>>> str(p.parent)
'/path/to/my'

并且在任何Path您可以使用该.absolute()方法获取绝对路径的情况下:

>>> os.chdir('/etc')
>>> p = pathlib.Path('../relative/path')
>>> str(p.parent)
'../relative'
>>> str(p.parent.absolute())
'/etc/../relative'

请注意,os.path.dirnamepathlib以不同的方式处理带有斜杠的路径。的pathlib父母some/path/some

>>> p = pathlib.Path('some/path/')
>>> p.parent
PosixPath('some')

在退货os.path.dirname时:some/path/some/path

>>> os.path.dirname('some/path/')
'some/path'
于 2016-02-18T19:02:56.457 回答
-7

我来这里是为了寻找非常相似的东西。我的解决方案基于@larsks 的上述内容,并假设您要保留除文件名之外的整个路径,即:

>>> import pathlib
>>> p = pathlib.Path('/path/to/my/file')
>>> pathlib.Path('/'.join(list(p.parts)[1:-1])+'/')

本质上,list(p.parts)[1:-1]创建一个路径元素列表,从第二个到第 n-1 个,然后用“/”将它们连接起来,并为结果字符串创建一个路径。编辑最后的 +'/' 添加斜杠 - 根据需要进行调整。

于 2021-01-26T00:19:38.183 回答