1. 程式人生 > 其它 >一分鐘學一個 Python 標準庫之 Pathlib

一分鐘學一個 Python 標準庫之 Pathlib

相對於 os.path 來說,Pathlib 極大地簡化了路徑相關的操作。舉個例子來說:

獲取當前檔案路徑下的 default.yaml 檔案

import os

os.path.join(os.path.dirname(__file__), "default.yaml")

只需要:

from pathlib import Path

Path(__file__).parent / "default.yaml"

不難看出,pathlib 有幾個優點:

  1. 字元少了很多,出 bug 的地方就少了很多;
  2. 和作業系統一樣,pathlib 直接使用路徑分隔符 / 來操作,而不是 join 的兩個引數;
  3. 非常符合直覺,從左到右閱讀。而 os.path 使用函式引數,需要來回跳躍理解。相比之下,Pathlib 閱讀起來很清晰。

Python3 標準庫中所有接受 str 作為路徑引數的地方,現在都可以接受一個 path 物件了。如果你使用的第三方庫只接受 str 作為引數,
可以通過 path_str = str(path) 來轉化一下。

Pathlib 的其他常用方法:

from pathlib import Path

cwd = Path.cwd()  # 獲取當前目錄
home = Path.home()  # 獲取家目錄,比如 /home/ubuntu
path = Path("/home/yifei")  # 建立一個新的 path 物件

path.is_dir()  # 是否是目錄
path.is_file()  # 是否是普通檔案
path.exists()  # 路徑是否存在
path.resolve()  # 解析成絕對路徑,比如 Path(".").resolve() 相當於 Path.cwd()

path.mkdir(parents=True, exists_ok=True) # 類似 mkdir -p

# 遍歷目錄
for child in path.iterdir():
    print(child)

# 除此之外,還有幾個很甜的方法,省去了 with open 語句
path = Path("/home/ubuntu/readme.txt")
text = path.read_text()
path.write_text(text)

path = Path("/home/ubuntu/image.png")
image = path.read_bytes()
path.write_bytes(image)

>>> path
PosixPath('/home/ubuntu/test.md')
>>> path.name
'test.md'
>>> path.stem
'test'
>>> path.suffix
'.md'
>>> path.parent
PosixPath('/home/ubuntu')
>>> path.parent.parent
PosixPath('/home')
>>> path.anchor
'/'

在這個注意力渙散的年代,想要經常寫一些長篇大論的帖子實在太難了,可能一個月才能憋出一篇。不如分享寫簡單但是有用的知識點,或許還能經常更新。

以上就是全部內容啦。

參考

  1. https://realpython.com/python-pathlib/
  2. https://docs.python.org/3/library/pathlib.html