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


前言

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

博主在學完os庫之后,就開始投入使用了,在項目中我們一般需要讓 路徑可配置 ,什么意思?假設你現在有個項目A,里面有些變量存儲了文件路徑,如: project_path = C:\Users\user\Desktop\py\moocInterface ;想象下,當你換了個電腦,你的項目不在放在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()  # 拼接路徑

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM