如何使用pathlib.path获取给定文件所在的文件夹名称?

159

在pathlib中是否有类似于os.path.dirname(path)的函数?

3个回答

247
看起来有一个包含给定路径的所有父目录的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] 的方式。您可以将 Path 转换为字符串,基本上可以得到您所期望的结果:

>>> 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'

1
我不知道什么是“共享文件夹”。我的建议是尝试一下,看看是否有效。如果它不起作用并且您需要进一步的帮助,最好的选择可能是发布一个新问题(因为评论不是进行扩展问题和答案的好地方)。 - larsks
5
p.parents[0],带有s - smitelli
4
我会添加选项 p.parent.resolve() 来获取已解析的绝对路径。 - Berci
27
使用p.parent.name可以获取父目录的名称,而不包含整个路径。 - BrettJ
@larsks 嗯,它只是不支持。 - Alaa M.
显示剩余5条评论

10
抱歉,我只能用英语进行回答。
from pathlib import Path
file_path = Path("/Users/yuanz/PycharmProjects/workenv/little_code/code09/sample.csv")

1. 获取目录路径

file_path.parent
# >>> /Users/yuanz/PycharmProjects/workenv/little_code/code09

2. 获取文件名

file_path.name
# >>> sample.csv

3. 获取文件类型

file_path.suffix

# >>> .csv

4.在此目录路径下添加新文件

file_path.parent.joinpath("dd.png")

-7

我来这里寻找非常类似的东西。 基于@larsks上面的内容,假设您想保留整个路径,除了文件名之外,我的解决方案是执行:

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

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


1
我对这个解决方案唯一的问题是它假定'/'是路径分隔符。如果你在Unix系统中,确实是这样,但如果你在Windows系统中,它就不是了...我正在寻找一个更加“优雅”的解决方案,因为我的问题需要跨操作系统。 - InfOracle
1
这就是为什么我将所有内容都包装在Path()中 - 如果我理解正确,这样做可以使输出符合任何操作系统的要求。但是我忘记在最后一行添加pathlib.了。 - Mo S
除了丢失前导的 /,这可能不是你想要的,仅执行 p.parent 有什么优势? - johnson
没有 - 我误解了 p.parent :\ - Mo S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接