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

问题描述 投票:0回答:3

是否有类似

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

python filenames python-os pathlib
3个回答
239
投票

tldr

import pathlib
p = pathlib.Path('/path/to/file.ext')
print(p.parent)
print(p.parent.absolute() )
print(p.parent.name)  # only dir name, not full path

细节

看起来有一个

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'

并且在任何

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'

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]
创建一个 Path 元素列表,从第二个到第 n-1 个,然后用“/”将它们连接起来,并创建结果字符串的路径。 编辑 最后的 +'/' 添加到尾部斜杠中 - 根据需要进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.