Python – 超好用的第三方庫pathlib,快速獲取項目中各種路徑
- 2020 年 3 月 8 日
- 筆記
前言
之前曾介紹過Python的os庫詳細使用方式,具體可看看這篇博文:https://www.cnblogs.com/poloyy/p/12341231.html
部落客在學完os庫之後,就開始投入使用了,在項目中我們一般需要讓 路徑可配置 ,什麼意思?假設你現在有個項目A,裡面有些變數存儲了文件路徑,如: project_path = C:UsersuserDesktoppymoocInterface ;想像下,當你換了個電腦,你的項目不在放在C盤下的時候,你這個變數是不是就失效了,此時你就要手動改路徑,改來改去….維護成本極高;所以部落客後面就用了os庫去完成路徑可配置,具體程式碼如下,大家完全可以復用的哈
首先,我的項目目錄結構是這樣的
- BaseSettings 文件存放的就是項目通用的常量,譬如項目路徑 project_path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
- 當我想獲取 config 文件夾下的 config.ini 時,我的變數就是 configIni_path = os.path.join(project_path, “config“, “config.ini“) ,以此類推~
- 可以看到,其實還是蠻長一行程式碼的,並且需要由內而外的閱讀程式碼;
- 無獨有偶,接觸到了 pathlib 庫之後,發現原來它有這麼好用,並且可以完全替代 os.path
pathlib 的簡單介紹
- 官方定義:Object-oriented filesystem paths(面向對象的文件系統路徑)
- 官方推薦:pathlib是一個從3版本開始就能完全替代os.path的內置庫,在python官網中這樣說 “對於字元串的低級路徑操作,您也可以使用該 os.path模組”
pathlib和os.path的比較
- 當需要找多個層級的目錄路徑時,通過 os.path 需要嵌套寫法,如我上面的 project_path ,而 pathlib 可以提供鏈式寫法,簡潔明了
- 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() # 拼接路徑