在对文件路径进行操作时,我们常用的库时 os.path,但是这个库相对来说用起来较为繁琐,为了更加高效的处理路径相关的问题,可以采用更加高效的 Path 库。

事实上在 pathlib 中定义了不同的 Path 类,但是通常直接用 Path 即可。

  1. from pathlib import Path

创建路径

这里列举 5 中较为常见的创建路径的方式:

  1. # 1. 输入为空,当前路径作为 path 等效于 Path(".")
  2. p = Path("")
  3. # 2. 常规操作
  4. pa = Path("./utils/demo.py")
  5. # 3. 路径片段 (与 os.path.join 类似)
  6. pb = Path("./", "utils", "demo.py")
  7. # 4. 多个绝对路径作为输入,只取最后一个
  8. pc = Path("/home","/data", "xxx", "demo.py") # /data/xxx/demo.py
  9. # 5. 单 . 会收缩,双 .. 不会
  10. pd = Path("home/./../demo.py") # home/../demo.py

操作路径

操作路径包括对路径中文件或者文件夹的提取,路径的拼接等:

  1. r = Path("/datasets/images")
  2. # 1. 路径拼接,非常方便!
  3. pa = r / 'dog' / 'Bob.png'
  4. pb = r.joinpath('dog', 'Alice.png')
  5. # 2. 获取路径中的文件名,后缀,去后缀文件名
  6. pic_name = pa.name # Bob.png
  7. pic_suffix = pa.suffix # .png, 对于多后缀采用 suffixes
  8. pic_no_suffix = pa.stem #Bob
  9. # 3. 获取路径的父路径
  10. pat_pth = pa.parent # /datasets/images/dog
  11. # 4. 是否为绝对路径
  12. is_absolute = pa.is_absolute()
  13. # 5. 路径匹配:match or glob
  14. print(Path("images/cat.png").match("*.png"))
  15. print(Path("images/").glob(".png")) # 获取images/ 下面所有图片路径(不是只有图片名)
  16. # 6. 修改文件名,后缀,去后缀文件名
  17. pa.with_name("bob.png")
  18. pa.with_suffix(".txt")
  19. pa.with_stem("bob")
  20. # 7. 获取当前文件夹
  21. p_cur = Path.cwd()
  22. # 8. 文件是否存在
  23. pa.exists()
  24. # 9. 文件夹何文件判断
  25. pa.is_file()
  26. pa.is_dir()
  27. # 10. 遍历文件夹下文件何文件夹
  28. for child in r.iterdir():
  29. print(child)
  30. # 11. 打开文件
  31. p = Path("test/readme.txt")
  32. with p.open() as f:
  33. print(f.readline())