首頁 > 軟體

Python檔案系統模組pathlib庫

2022-05-28 18:01:33

一、pathlib庫官方定義

pathlib 是Python內建庫,Python 檔案給它的定義是 Object-oriented filesystem paths(物件導向的檔案系統路徑)。pathlib 提供表示檔案系統路徑的類,其語意適用於不同的作業系統。

路徑類在純路徑之間劃分,純路徑提供純粹的計算操作而沒有 I / O,以及具體路徑,它繼承純路徑但也提供 I / O 操作。

二、pathlib祕籍

1、 基本用法

  • Path.iterdir() # 遍歷目錄的子目錄或者檔案
  • Path.is_dir() # 判斷是否是目錄
  • Path.glob() # 過濾目錄(返回生成器)
  • Path.resolve() # 返回絕對路徑
  • Path.exists() # 判斷路徑是否存在
  • Path.open() # 開啟檔案(支援with)
  • Path.unlink() # 刪除檔案或目錄(目錄非空觸發異常) 

2、 基本屬性

  • Path.parts # 分割路徑 類似os.path.split(), 不過返回元組
  • Path.drive # 返回驅動器名稱
  • Path.root # 返回路徑的根目錄
  • Path.anchor # 自動判斷返回drive或root
  • Path.parents # 返回所有上級目錄的列表

3、 改變路徑

  • Path.with_name() # 更改路徑名稱, 更改最後一級路徑名
  • Path.with_suffix() # 更改路徑字尾

4、 拼接路徑

  • Path.joinpath() # 拼接路徑
  • Path.relative_to() # 計算相對路徑

5、 測試路徑

  • Path.match() # 測試路徑是否符合pattern
  • Path.is_dir() # 是否是檔案
  • Path.is_absolute() # 是否是絕對路徑
  • Path.is_reserved() # 是否是預留路徑
  • Path.exists() # 判斷路徑是否真實存在

6、 其他方法

  • Path.cwd() # 返回當前目錄的路徑物件
  • Path.home() # 返回當前使用者的home路徑物件
  • Path.stat() # 返回路徑資訊, 同os.stat()
  • Path.chmod() # 更改路徑許可權, 類似os.chmod()
  • Path.expanduser() # 展開~返回完整路徑物件
  • Path.mkdir() # 建立目錄
  • Path.rename() # 重新命名路徑
  • Path.rglob() # 遞迴遍歷所有子目錄的檔案

三、os和pathlib.Path的區別

相對於 os 模組的 path 方法,Python3 標準庫 pathlib 模組的 Path 對路徑的操作會更簡單。

1、 獲取當前檔案路徑

使用 os 模組時,通過 getcwd() 方法可以直接獲取當前檔案路徑

在 Pycharm 中,可以使用 os.path.dirname(__file__) 獲取當前檔案路徑,因為 Python 並沒有提供 __file__ 這個概念,他是 Pycharm 提供的:

import os

print(os.getcwd())  # C:Usersbobin.yangPycharmProjectsuntitled
print(os.path.dirname(__file__))  # C:/Users/bobin.yang/PycharmProjects/untitled

在 pathlib 模組中,通過 Path.cwd() 方法可以直接獲取當前檔案路徑,我們可以動手試一試:

import pathlib

print(pathlib.Path.cwd())  # C:Usersbobin.yangPycharmProjectsuntitled

通過 Pycharm 我們可以使用快捷鍵 ctrl+滑鼠左鍵 點選檢視該方法的詳細介紹。

從上圖中可以看出 cwd() 方法不過是對 os 庫中 getcwd() 方法進行了封裝,看起來好像更差勁了,但是官方的推出一定不是子虛烏有的,現在讓我們一起來揭祕。

2、 獲取上層/上層目錄

上面那個案例彷彿讓 pashlib 庫的使用變得更加複雜了,為了揭祕,我們只能一同感受下 pathlib 庫的構成,瞭解 pathlib 庫如何帶給我們便捷。

在 os 模組中,如果我們要獲取某一個檔案的父目錄,os 模組的寫法為:

import os

print(os.path.dirname(os.path.dirname(os.getcwd())))  # C:PycharmProjects

在 pathlib 庫中,可以通過這樣簡潔方法實現:

import pathlib

print(pathlib.Path.cwd().parent)   # C:PycharmProjects

並且,如果你需要找他爺爺,是不是再來一個 .parent 就行了。相比較 os 模組的 os.path.dirname() 是不是方便太多太多了?

3、 路徑拼接

如果你要在他父目錄中拼接路徑,通過 os 模組你可能需要寫這麼一長串程式碼:

import os

print(os.path.join(os.path.dirname(os.getcwd()), '路徑拼接', '真麻煩'))  # C:PycharmProjects路徑拼接真麻煩

當你使用 pathlib 的時候,我們一起來感受他的便捷之處吧!

# /Users/mac/test.py
import os

paths = ('路徑拼接', '真麻煩')
print(pathlib.Path.cwd().parent.joinpath(*paths))  # C:PycharmProjects路徑拼接真麻煩

通過 pathlib 庫拼接路徑,你可以很方便的調節他在他祖輩的位置,妙哉。

4、 其他封裝

pathlib 封裝了很多的 os.path 中的方法,如下所示:

  • os.path.expanduser() --> pathlib.Path.home()
  • os.path.expanduser() --> pathlib.Path.expanduser()
  • os.stat() --> pathlib.Path.stat()
  • os.chmod() --> pathlib.Path.chmod()

四、pathlib.PurePath的使用

上一節的操作大部分都是通過 pathlib 庫中的 Path 實現,其實他還有一個更加高大上的模組,也就是我們這一節的主角:pathlib.PurePath

PurePath 是一個純路徑物件,純路徑物件提供了實際上不存取檔案系統的路徑處理操作。

有三種方法可以存取這些類,我們也稱之為 flavor 。

1、 PurePath.match

下面讓我們來實現一個神奇的功能,判斷當前的路徑下是否有符合'*.py'規則的檔案。

import pathlib

print(pathlib.PurePath(__file__).match('*.py'))  # True

輸出為什麼會是 True 呢?因為當前資料夾下不就有一個 test.py 嗎?

2、 PurePath的子類:PurePosixPath(非Windows系統)、PureWindowsPath

看見 pathlib.PurePath 後面跟著 match,那是不是能說明他是個物件,而不是一個單純的路徑字串,因此我們可以試著列印 pathlib.PurePath 看一看。

import pathlib

os_path = os.path.dirname(__file__)
print(os_path)  # C:/PycharmProjects/untitled

pure_path = pathlib.PurePath(__file__)
print(pure_path)  # C:PycharmProjectsuntitledrun.py
print(type(pure_path))  # <class 'pathlib.PureWindowsPath'>


print(pathlib.PurePath(__file__).match('*.py'))  # True

通過列印 os.path 獲取當前路徑的結果,得到一個路徑字串;而通過 pathlib.PurePath 則獲得了一個 PurePosixPath 物件,並且由此得到的路徑包括了當前檔案 run.py。

到此這篇關於Python檔案系統模組pathlib庫的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com