Python – 超好用的第三方庫pathlib,快速獲取項目中各種路徑

前言

之前曾介紹過Python的os庫詳細使用方式,具體可看看這篇博文:https://www.cnblogs.com/poloyy/p/12341231.html

部落客在學完os庫之後,就開始投入使用了,在項目中我們一般需要讓 路徑可配置 ,什麼意思?假設你現在有個項目A,裡面有些變數存儲了文件路徑,如: project_path = C:UsersuserDesktoppymoocInterface ;想像下,當你換了個電腦,你的項目不在放在C盤下的時候,你這個變數是不是就失效了,此時你就要手動改路徑,改來改去….維護成本極高;所以部落客後面就用了os庫去完成路徑可配置,具體程式碼如下,大家完全可以復用的哈

首先,我的項目目錄結構是這樣的

  1. BaseSettings 文件存放的就是項目通用的常量,譬如項目路徑 project_path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0] 
  2. 當我想獲取 config 文件夾下的 config.ini 時,我的變數就是 configIni_path = os.path.join(project_path, config, config.ini) ,以此類推~
  3. 可以看到,其實還是蠻長一行程式碼的,並且需要由內而外的閱讀程式碼;
  4. 無獨有偶,接觸到了 pathlib 庫之後,發現原來它有這麼好用,並且可以完全替代 os.path 

 

pathlib 的簡單介紹

  • 官方定義:Object-oriented filesystem paths(面向對象的文件系統路徑)
  • 官方推薦:pathlib是一個從3版本開始就能完全替代os.path的內置庫,在python官網中這樣說 “對於字元串的低級路徑操作,您也可以使用該 os.path模組”

 

pathlib和os.path的比較

  1. 當需要找多個層級的目錄路徑時,通過 os.path 需要嵌套寫法,如我上面的 project_path ,而 pathlib 可以提供鏈式寫法,簡潔明了
  2. os.path 只用於處理路徑,如果你想在獲取到的路徑下做一些事情(如:創建一個目錄),你就需要用 os 模組,而 pathlib 可以一站式搞定,將在後面展開講

 

從這開始,我們通過os.path和pathlib的比較他們的程式碼量和實現方式

 

獲取當前文件路徑

os模組獲取當前文件路徑

import os    v2 = os.getcwd()    # 輸出 F:moocInterface

pathlib 獲取當前文件路徑

from pathlib import Path    v = Path.cwd()    # 輸出 F:moocInterafce

 

獲取上層、上上層目錄

os 獲取上上層目錄

import os    print(os.path.dirname(os.path.dirname(os.getcwd()))) # F:

很明顯用os的寫法就是嵌套式調用

pathlib 獲取上上層目錄

from pathlib import Path    print(Path.cwd().parent.parent)  # F:

而用pathlib就是鏈式調用

 

拼接目錄

場景:在當前目錄的父級目錄拼接 test 文件夾下的 test.txt 

os 拼接目錄

import os    os.path.join(os.path.dirname(os.getcwd()),"test","test.txt")

 

pathlib 拼接目錄

from pathlib import Path    paths = ["test","test.txt"]  Path.cwd().parent.joinpath(*paths)

 

創建文件夾並重命名

os模組

import os  import os.path    # 創建 peoject/test目錄  os.makedirs(os.path.join('project', 'test'), exist_ok=True)    # 將test.txt 重命名為 project/tests.txt  os.rename('test.txt', os.path.join('project', 'tests.txt'))

pathlib模組的Path對象

from pathlib import Path    # 創建 project/test目錄  Path('project/test').mkdir(parents=True, exist_ok=True)    # 將test.txt 重命名為 project/tests.txt  Path('test.txt').rename('project/test.txt')

 

os和pathlib的對應關係

pathlib的常用基本方法

Path.parents  # 返回所有上級目錄的列表    Path.parts  # 分割路徑 類似os.path.split(), 不過返回元組    Path.root  # 返迴路徑的根目錄

 

pathlib的常用基本方法

Path.is_dir()  # 判斷是否是目錄    Path.is_dir()  # 是否是文件    Path.exists()  # 判斷路徑是否存在    Path.open()  # 打開文件(支援with)    Path.resolve()  # 返回絕對路徑    Path.cwd()  # 返回當前目錄    Path.iterdir()  # 遍歷目錄的子目錄或者文件    Path.mkdir()  # 創建目錄    Path.rename()  # 重命名路徑    Path.unlink()  # 刪除文件或目錄(目錄非空觸發異常)    Path.joinpath()  # 拼接路徑