Python 如何从pathlib.path获取给定文件所在的文件夹名?

Python 如何从pathlib.path获取给定文件所在的文件夹名?,python,filenames,python-os,pathlib,Python,Filenames,Python Os,Pathlib,是否有类似于os.path.dirname(path),但在pathlib中?看起来有一个parents元素包含给定路径的所有父目录。例如,如果您从以下内容开始: >>> import pathlib >>> p = pathlib.Path('/path/to/my/file') 然后p.parents[0]是包含文件的目录: >>> p.parents[0] PosixPath('/path/to/my') …和p.parents[1

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

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

>>> import pathlib
>>> p = pathlib.Path('/path/to/my/file')
然后
p.parents[0]
是包含
文件的目录

>>> p.parents[0]
PosixPath('/path/to/my')
…和
p.parents[1]
将是上一个目录:

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

p.parent
是请求p.parents[0]的另一种方式。您可以将
路径
转换为字符串,并获得您所期望的结果:

>>> str(p.parent)
'/path/to/my'
此外,在任何
路径上
都可以使用
.absolute()
方法获取绝对路径:

>>> os.chdir('/etc')
>>> p = pathlib.Path('../relative/path')
>>> str(p.parent)
'../relative'
>>> str(p.parent.absolute())
'/etc/../relative'
请注意,
os.path.dirname
pathlib
以不同的方式处理带有尾随斜杠的路径。
some/path/
pathlib
父级是
some

>>> p = pathlib.Path('some/path/')
>>> p.parent
PosixPath('some')
some/path/
上的
os.path.dirname
返回
some/path

>>> os.path.dirname('some/path/')
'some/path'

我来这里是想找一些非常相似的东西。我的解决方案基于@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个,然后用“/”将它们连接起来,并生成结果字符串的路径。编辑尾部斜杠中最后的+'/'添加-根据需要进行调整。

我不知道什么是“共享文件夹”。我的建议是试试看是否有效。如果它不起作用,并且您需要进一步的帮助,您最好的选择可能是发布一个新问题(因为注释不是一个用于扩展问题和答案的好地方)。出于某种原因,
p.parent[0]
p.parent[1]
在Mac上不起作用,因为不支持索引。对当前目录使用
p.parent
,并使用
p.parent.parent
向上移动一个目录。@OliverOliver
p.parents[0]
,使用
s
。我将添加选项
p.parent.resolve()
获取解析的绝对路径。使用
p.parent.name
获取父目录的名称,而不包含整个路径。此解决方案的唯一问题是它假设“/”是路径拆分器。如果您在unix中,则是这样,但如果您在Windows中,则不是这样……我一直在寻找一个更“优雅”的解决方案,因为我的问题同样要求操作系统独立性……这就是为什么我将所有内容包装在Path()中的原因—如果我理解正确,这样做会使输出与任何操作系统兼容。但是我忘了在最后一行添加
pathlib.
。除了失去了前面的
/
,这可能不是你想要的,仅仅做
p.parent
有什么好处?没有-我误解了
p.parent
:\