Python文件系統(tǒng)模塊pathlib庫(kù)
一、pathlib庫(kù)官方定義
pathlib 是Python內(nèi)置庫(kù),Python 文檔給它的定義是 Object-oriented filesystem paths(面向?qū)ο蟮奈募到y(tǒng)路徑)。pathlib 提供表示文件系統(tǒng)路徑的類,其語義適用于不同的操作系統(tǒng)。
路徑類在純路徑之間劃分,純路徑提供純粹的計(jì)算操作而沒有 I / O,以及具體路徑,它繼承純路徑但也提供 I / O 操作。
二、pathlib秘籍
1、 基本用法
- Path.iterdir() # 遍歷目錄的子目錄或者文件
- Path.is_dir() # 判斷是否是目錄
- Path.glob() # 過濾目錄(返回生成器)
- Path.resolve() # 返回絕對(duì)路徑
- Path.exists() # 判斷路徑是否存在
- Path.open() # 打開文件(支持with)
- Path.unlink() # 刪除文件或目錄(目錄非空觸發(fā)異常)
2、 基本屬性
- Path.parts # 分割路徑 類似os.path.split(), 不過返回元組
- Path.drive # 返回驅(qū)動(dòng)器名稱
- Path.root # 返回路徑的根目錄
- Path.anchor # 自動(dòng)判斷返回drive或root
- Path.parents # 返回所有上級(jí)目錄的列表
3、 改變路徑
- Path.with_name() # 更改路徑名稱, 更改最后一級(jí)路徑名
- Path.with_suffix() # 更改路徑后綴
4、 拼接路徑
- Path.joinpath() # 拼接路徑
- Path.relative_to() # 計(jì)算相對(duì)路徑
5、 測(cè)試路徑
- Path.match() # 測(cè)試路徑是否符合pattern
- Path.is_dir() # 是否是文件
- Path.is_absolute() # 是否是絕對(duì)路徑
- Path.is_reserved() # 是否是預(yù)留路徑
- Path.exists() # 判斷路徑是否真實(shí)存在
6、 其他方法
- Path.cwd() # 返回當(dāng)前目錄的路徑對(duì)象
- Path.home() # 返回當(dāng)前用戶的home路徑對(duì)象
- Path.stat() # 返回路徑信息, 同os.stat()
- Path.chmod() # 更改路徑權(quán)限, 類似os.chmod()
- Path.expanduser() # 展開~返回完整路徑對(duì)象
- Path.mkdir() # 創(chuàng)建目錄
- Path.rename() # 重命名路徑
- Path.rglob() # 遞歸遍歷所有子目錄的文件
三、os和pathlib.Path的區(qū)別
相對(duì)于 os 模塊的 path 方法,Python3 標(biāo)準(zhǔn)庫(kù) pathlib 模塊的 Path 對(duì)路徑的操作會(huì)更簡(jiǎn)單。
1、 獲取當(dāng)前文件路徑
使用 os 模塊時(shí),通過 getcwd()
方法可以直接獲取當(dāng)前文件路徑
在 Pycharm 中,可以使用 os.path.dirname(__file__)
獲取當(dāng)前文件路徑,因?yàn)?Python 并沒有提供 __file__ 這個(gè)概念,他是 Pycharm 提供的:
import os print(os.getcwd()) # C:\Users\bobin.yang\PycharmProjects\untitled print(os.path.dirname(__file__)) # C:/Users/bobin.yang/PycharmProjects/untitled
在 pathlib 模塊中,通過 Path.cwd()
方法可以直接獲取當(dāng)前文件路徑,我們可以動(dòng)手試一試:
import pathlib print(pathlib.Path.cwd()) # C:\Users\bobin.yang\PycharmProjects\untitled
通過 Pycharm 我們可以使用快捷鍵 ctrl+鼠標(biāo)左鍵
點(diǎn)擊查看該方法的詳細(xì)介紹。
從上圖中可以看出 cwd()
方法不過是對(duì) os 庫(kù)中 getcwd()
方法進(jìn)行了封裝,看起來好像更差勁了,但是官方的推出一定不是子虛烏有的,現(xiàn)在讓我們一起來揭秘。
2、 獲取上層/上層目錄
上面那個(gè)案例仿佛讓 pashlib 庫(kù)的使用變得更加復(fù)雜了,為了揭秘,我們只能一同感受下 pathlib 庫(kù)的構(gòu)成,了解 pathlib 庫(kù)如何帶給我們便捷。
在 os 模塊中,如果我們要獲取某一個(gè)文件的父目錄,os 模塊的寫法為:
import os print(os.path.dirname(os.path.dirname(os.getcwd()))) # C:\PycharmProjects
在 pathlib 庫(kù)中,可以通過這樣簡(jiǎn)潔方法實(shí)現(xiàn):
import pathlib print(pathlib.Path.cwd().parent) # C:\PycharmProjects
并且,如果你需要找他爺爺,是不是再來一個(gè) .parent
就行了。相比較 os 模塊的 os.path.dirname()
是不是方便太多太多了?
3、 路徑拼接
如果你要在他父目錄中拼接路徑,通過 os 模塊你可能需要寫這么一長(zhǎng)串代碼:
import os print(os.path.join(os.path.dirname(os.getcwd()), '路徑拼接', '真麻煩')) # C:\PycharmProjects\路徑拼接\真麻煩
當(dāng)你使用 pathlib 的時(shí)候,我們一起來感受他的便捷之處吧!
# /Users/mac/test.py import os paths = ('路徑拼接', '真麻煩') print(pathlib.Path.cwd().parent.joinpath(*paths)) # C:\PycharmProjects\路徑拼接\真麻煩
通過 pathlib 庫(kù)拼接路徑,你可以很方便的調(diào)節(jié)他在他祖輩的位置,妙哉。
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的使用
上一節(jié)的操作大部分都是通過 pathlib 庫(kù)中的 Path 實(shí)現(xiàn),其實(shí)他還有一個(gè)更加高大上的模塊,也就是我們這一節(jié)的主角:pathlib.PurePath
。
PurePath 是一個(gè)純路徑對(duì)象,純路徑對(duì)象提供了實(shí)際上不訪問文件系統(tǒng)的路徑處理操作。
有三種方法可以訪問這些類,我們也稱之為 flavor 。
1、 PurePath.match
下面讓我們來實(shí)現(xiàn)一個(gè)神奇的功能,判斷當(dāng)前的路徑下是否有符合'*.py'規(guī)則的文件。
import pathlib print(pathlib.PurePath(__file__).match('*.py')) # True
輸出為什么會(huì)是 True
呢?因?yàn)楫?dāng)前文件夾下不就有一個(gè) test.py
嗎?
2、 PurePath的子類:PurePosixPath(非Windows系統(tǒng))、PureWindowsPath
看見 pathlib.PurePath 后面跟著 match,那是不是能說明他是個(gè)對(duì)象,而不是一個(gè)單純的路徑字符串,因此我們可以試著打印 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:\PycharmProjects\untitled\run.py print(type(pure_path)) # <class 'pathlib.PureWindowsPath'> print(pathlib.PurePath(__file__).match('*.py')) # True
通過打印 os.path 獲取當(dāng)前路徑的結(jié)果,得到一個(gè)路徑字符串;而通過 pathlib.PurePath 則獲得了一個(gè) PurePosixPath 對(duì)象,并且由此得到的路徑包括了當(dāng)前文件 run.py。
到此這篇關(guān)于Python文件系統(tǒng)模塊pathlib庫(kù)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在阿里云服務(wù)器上配置CentOS+Nginx+Python+Flask環(huán)境
這篇文章主要介紹了在阿里云服務(wù)器上配置CentOS+Nginx+Python+Flask環(huán)境的教程,值得一提的是這里的方案用Nginx作反向代理而使用Gunicorn作wsgi服務(wù)器,需要的朋友可以參考下2016-06-06Pytorch evaluation每次運(yùn)行結(jié)果不同的解決
今天小編就為大家分享一篇Pytorch evaluation每次運(yùn)行結(jié)果不同的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python 自動(dòng)化處理Excel和Word實(shí)現(xiàn)自動(dòng)辦公
毫無疑問,Microsoft Excel 和 Word 是我們?nèi)粘^k公中使用最廣泛的辦公軟件。將反復(fù)、復(fù)雜的工作自動(dòng)化處理,是我們需要思考的問題,本篇文章幫你解決這個(gè)問題2021-11-11巧妙使用Python裝飾器處理if...elif...else
大家好,今天在 Github 閱讀 EdgeDB[1] 的代碼,發(fā)現(xiàn)它在處理大量if…elif…else的時(shí)候,巧妙地使用了裝飾器,方法設(shè)計(jì)精巧,分享給大家一下,歡迎收藏學(xué)習(xí),喜歡點(diǎn)贊支持2021-11-11tf.nn.conv2d與tf.layers.conv2d的區(qū)別及說明
這篇文章主要介紹了tf.nn.conv2d與tf.layers.conv2d的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Pandas中把dataframe轉(zhuǎn)成array的方法
下面小編就為大家分享一篇Pandas中把dataframe轉(zhuǎn)成array的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04