前言
之前曾介紹過Python的os庫詳細使用方式,具體可看看這篇博文:https://www.cnblogs.com/poloyy/p/12341231.html
博主在學完os庫之后,就開始投入使用了,在項目中我們一般需要讓 路徑可配置 ,什么意思?假設你現在有個項目A,里面有些變量存儲了文件路徑,如: project_path = C:\Users\user\Desktop\py\moocInterface ;想象下,當你換了個電腦,你的項目不在放在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() # 拼接路徑