我只想获取父目录的名称。意思是,只有它的最后一个组件,而不是完整路径。
例如,对于a/b/c/d/e我想要获取的路径d,而不是a/b/c/d.
我目前的代码:
import os
path = "C:/example/folder/file1.jpg"
directoryName = os.path.dirname(os.path.normpath(path))
print(directoryName)
Run Code Online (Sandbox Code Playgroud)
这会打印出来C:/example/folder,我只想得到folder.
最简单的方法是使用pathlib. 使用parent将为您提供父级的完整路径,并且name只会为您提供最后一个组件:
>>> from pathlib import Path
>>> path = Path("/a/b/c/d/e")
>>> path.parent.name
'd'
Run Code Online (Sandbox Code Playgroud)
为了便于比较,做同样的os.path,你需要得到基本名称中的目录名称的路径。所以这直接转化为:
import os
path = "C:/example/folder/file1.jpg"
print(os.path.basename(os.path.dirname(path)))
Run Code Online (Sandbox Code Playgroud)
哪个是更好的版本:
os.path.split(os.path.split(path)[0])[1]
Run Code Online (Sandbox Code Playgroud)
两者都给出:
os.path.split(os.path.split(path)[0])[1]
Run Code Online (Sandbox Code Playgroud)
如您所见,该pathlib方法更加清晰易读。因为pathlib结合了 OOP 方法来表示路径,而不是字符串,所以我们得到了一个清晰的属性/方法调用链。
path.parent.name
Run Code Online (Sandbox Code Playgroud)
按顺序阅读为:
从路径开始 -> 取其父级 -> 取其名称
而在os函数接受字符串方法中,您实际上需要从内到外读取!
os.path.basename(os.path.dirname(path))
Run Code Online (Sandbox Code Playgroud)
按顺序阅读为:
路径的父级名称
我相信你会同意这更难阅读和理解(这只是一个简单的例子)。
'folder'
Run Code Online (Sandbox Code Playgroud)
但正如文档所述:
请注意,知道这个 [(the separator)] 不足以解析或连接路径名——使用os.path.split()和os.path.join() ——但它偶尔有用。
用于pathlib.Path获取.name的.parent:
from pathlib import Path
p = Path("C:/example/folder/file1.jpg")
print(p.parent.name) # folder
Run Code Online (Sandbox Code Playgroud)
与 相比os.path,pathlib将路径表示为单独的类型而不是字符串。它通常更短并且使用更方便。
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |