是否有类似的东西os.path.dirname(path)
,但在 pathlib 中?
问问题
81774 次
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.dirname
并pathlib
以不同的方式处理带有斜杠的路径。的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 回答