在对文件路径进行操作时,我们常用的库时 os.path,但是这个库相对来说用起来较为繁琐,为了更加高效的处理路径相关的问题,可以采用更加高效的 Path 库。
事实上在 pathlib 中定义了不同的 Path 类,但是通常直接用 Path 即可。
from pathlib import Path
创建路径
这里列举 5 中较为常见的创建路径的方式:
# 1. 输入为空,当前路径作为 path 等效于 Path(".")
p = Path("")
# 2. 常规操作
pa = Path("./utils/demo.py")
# 3. 路径片段 (与 os.path.join 类似)
pb = Path("./", "utils", "demo.py")
# 4. 多个绝对路径作为输入,只取最后一个
pc = Path("/home","/data", "xxx", "demo.py") # /data/xxx/demo.py
# 5. 单 . 会收缩,双 .. 不会
pd = Path("home/./../demo.py") # home/../demo.py
操作路径
操作路径包括对路径中文件或者文件夹的提取,路径的拼接等:
r = Path("/datasets/images")
# 1. 路径拼接,非常方便!
pa = r / 'dog' / 'Bob.png'
pb = r.joinpath('dog', 'Alice.png')
# 2. 获取路径中的文件名,后缀,去后缀文件名
pic_name = pa.name # Bob.png
pic_suffix = pa.suffix # .png, 对于多后缀采用 suffixes
pic_no_suffix = pa.stem #Bob
# 3. 获取路径的父路径
pat_pth = pa.parent # /datasets/images/dog
# 4. 是否为绝对路径
is_absolute = pa.is_absolute()
# 5. 路径匹配:match or glob
print(Path("images/cat.png").match("*.png"))
print(Path("images/").glob(".png")) # 获取images/ 下面所有图片路径(不是只有图片名)
# 6. 修改文件名,后缀,去后缀文件名
pa.with_name("bob.png")
pa.with_suffix(".txt")
pa.with_stem("bob")
# 7. 获取当前文件夹
p_cur = Path.cwd()
# 8. 文件是否存在
pa.exists()
# 9. 文件夹何文件判断
pa.is_file()
pa.is_dir()
# 10. 遍历文件夹下文件何文件夹
for child in r.iterdir():
print(child)
# 11. 打开文件
p = Path("test/readme.txt")
with p.open() as f:
print(f.readline())