python內(nèi)置模塊pathlib.Path類操作目錄和文件的使用
python自帶的pathlib模塊提供了很多路徑相關(guān)的功能,而pathlib.Path 是pathlib 模塊中的一個(gè)核心類,它代表了文件系統(tǒng)中的一個(gè)路徑,實(shí)現(xiàn)功能比如創(chuàng)建、刪除、移動(dòng)文件,讀取和寫(xiě)入文件內(nèi)容,遍歷目錄等。
Path 類跟os.path提供的功能有很多相似之處,各有所長(zhǎng),大家可根據(jù)實(shí)際需要選擇os.path或者pathlib.Path。
pathlib.Path路徑操作
使用前我們先導(dǎo)入Path類
from pathlib import Path
以下是Path類的源代碼介紹,繼承自PurePath類,初始化函數(shù)支持可變參數(shù),可傳可不傳。

一 介紹classmethod,可通過(guò)Path類直接調(diào)用
1 Path.cwd()
返回當(dāng)前程序工作的目錄。
功能類似于os.getcwd()

測(cè)試代碼:
print(f'當(dāng)前目錄: {Path.cwd()}')
當(dāng)前目錄: /Users/htsc/Desktop2 Path.home()
返回當(dāng)前程序工作的目錄的家目錄。
功能類似于os.path.expanduser('~')。

測(cè)試代碼:
print(f'當(dāng)前目錄的家目錄: {Path.home()}')
當(dāng)前目錄的家目錄: /Users/htsc二 介紹非classmethod,需要初始化Path類然后調(diào)用
3 Path.samefile(other_path)
檢查對(duì)象是否跟傳入的路徑是同一個(gè)文件或目錄。
功能類似于os.path.samefile()。

測(cè)試代碼:
先初始化Path類,傳入?yún)?shù)Path.cwd(),表示當(dāng)前路徑。
path_ins= Path(Path.cwd())
print(path_ins.samefile('/Users/htsc/Desktop'))
結(jié)果:
True4 Path.iterdir( )
返回當(dāng)前路徑下的文件和目錄對(duì)象,不會(huì)遞歸里面的目錄。這個(gè)方法返回的是一個(gè)生成器,可通過(guò)for循環(huán)訪問(wèn)。

測(cè)試代碼:
先初始化Path類,傳入?yún)?shù)Path.cwd(),表示當(dāng)前路徑。使用iterdir函數(shù)訪問(wèn)目錄的內(nèi)容,并對(duì)子目錄繼續(xù)使用iterdir函數(shù)訪問(wèn)。
path_ins= Path(Path.cwd())
for i in path_ins.iterdir():
print(f'第一層路徑:{i}')
if i.is_dir(): #如果有第二層目錄,則循環(huán)
for j in i.iterdir():
print(f'第二層路徑:{j}')5 Path.glob(pattern)
返回與給定模式匹配的所有文件路徑對(duì)象;這個(gè)方法返回的是一個(gè)生成器,可通過(guò)for循環(huán)訪問(wèn)。

參數(shù)pattern解釋:pattern是一個(gè)字符串,用于指定要搜索的文件模式,有些類似于re模塊對(duì)應(yīng)的正則表達(dá)式,支持像通配符*,代表單個(gè)字符的?等。
以下是一些pattern參數(shù)的示例:
- '*':匹配給定路徑下所有的文件和目錄(*不會(huì)遞歸查找子目錄)。
- '*.txt':匹配給定路徑下所有以.txt結(jié)尾的文件(不會(huì)遞歸查找子目錄)。
- 'a/*.csv':匹配a目錄下所有以.csv結(jié)尾的文件。
- '**':匹配當(dāng)前目錄及其所有子目錄下的文件和目錄(**支持遞歸)。
- '**/*.py':匹配當(dāng)前目錄及其所有子目錄下所有以.py結(jié)尾的文件(**支持遞歸)。
- '?.txt':匹配所有單個(gè)字符文件名并以.txt結(jié)尾的文件(例如a.txt,但不包括ab.txt)。
- '[abc].txt':匹配a.txt、b.txt或c.txt。
測(cè)試代碼:
先初始化Path類,傳入?yún)?shù)Path.cwd(),表示當(dāng)前路徑。
1)使用glob函數(shù)匹配特定的python文件。
path_ins= Path(Path.cwd())
for i in path_ins.glob('*.py'):
print(f'路徑:{i}')結(jié)果如圖:

2)使用glob函數(shù)匹配所有的文件和目錄。
path_ins= Path(Path.cwd())
for i in path_ins.glob('*'):
print(f'路徑:{i}')結(jié)果如圖:

3)使用glob函數(shù)匹配當(dāng)前目錄及所有子目錄下的所有文件和文件夾。
path_ins= Path(Path.cwd())
for i in path_ins.glob('**'):
print(f'路徑:{i}')結(jié)果如圖:

6 Path.rglob(pattern)
遞歸遍歷所有文件夾,返回與給定模式匹配的所有文件路徑對(duì)象,這個(gè)方法返回的是一個(gè)生成器,可通過(guò)for循環(huán)訪問(wèn)。

rglob函數(shù)與glob函數(shù)不同之處在于默認(rèn)會(huì)遞歸所有目錄進(jìn)行匹配。參數(shù)pattern與glob函數(shù)一致,只是我們不用在傳入**來(lái)遞歸了。
測(cè)試代碼:
先初始化Path類,傳入?yún)?shù)Path.cwd(),表示當(dāng)前路徑。
使用rglob函數(shù)遞歸所有目錄匹配特定的python文件。
path_ins= Path(Path.cwd())
for i in path_ins.rglob('*.py'):
print(f'路徑:{i}')結(jié)果如圖:

7 Path.absolute()
返回Path對(duì)象的絕對(duì)路徑。
絕對(duì)路徑=當(dāng)前程序所在目錄+Path對(duì)象的參數(shù)路徑

測(cè)試代碼:
先初始化Path類,傳入1.txt,打印出絕對(duì)路徑。
path_ins= Path('1.txt')
print(path_ins.absolute())
結(jié)果:
/Users/htsc/Desktop/1.txt8 Path.is_absolute()
判斷Path對(duì)象是否是絕對(duì)路徑。如果是返回True。

測(cè)試代碼:
先初始化Path類,傳入1.txt,打印是否是絕對(duì)路徑。
path_ins= Path('1.txt')
print(path_ins.is_absolute())
結(jié)果:False9 Path.resolve(strict=False)
返回Path對(duì)象為絕對(duì)路徑。如果strict參數(shù)=True,則校驗(yàn)Path對(duì)象的路徑是否正確。

測(cè)試代碼:
1)初始化時(shí)隨便寫(xiě)了一個(gè)路徑,strict參數(shù)=True
path_ins= Path('eee/1.txt')
print(path_ins.resolve(strict=True))執(zhí)行結(jié)果:

2)初始化時(shí)隨便寫(xiě)了一個(gè)路徑,strict參數(shù)=True
path_ins= Path('eee/1.txt')
print(path_ins.resolve())執(zhí)行結(jié)果:
/Users/htsc/Desktop/eee/1.txt
10 Path.stat()
返回文件或目錄的狀態(tài)信息,比如文件大小、創(chuàng)建時(shí)間、修改時(shí)間等。
該函數(shù)功能類似于os.stat()

測(cè)試代碼:
先初始化Path類,傳入真實(shí)存在的文件config.txt
path_ins= Path('config.txt')
print(path_ins.stat())結(jié)果:os.stat_result(st_mode=33188, st_ino=6398788, st_dev=16777233, st_nlink=1, st_uid=501, st_gid=20, st_size=81, st_atime=1724491423, st_mtime=1724423868, st_ctime=1724423868)
11 Path.owner()
判斷Path對(duì)象的擁有者,一般是登錄用戶。

測(cè)試代碼:
先初始化Path類,傳入1.txt,打印owner
path_ins= Path('1.txt')
print(path_ins.owner())
結(jié)果:Admin12 文件打開(kāi)/讀取/寫(xiě)入相關(guān)函數(shù)
- Path.open(): 類似于open函數(shù),打開(kāi)文件對(duì)象
- Path.read_bytes():讀取二進(jìn)制文件內(nèi)容
- Path.read_text(): 讀取普通文本內(nèi)容
- Path.write_bytes(data): 以二進(jìn)制內(nèi)容寫(xiě)入
- Path.wriite_text(data): 以普通文本內(nèi)容寫(xiě)入


13 Path.touch()
默認(rèn)情況下該方法用于創(chuàng)建一個(gè)新的空文件,如果文件已經(jīng)存在,則會(huì)更新其訪問(wèn)和修改時(shí)間。

- 參數(shù)exist_ok=False時(shí),則檢查傳入的路徑是否已經(jīng)存在,已經(jīng)存在會(huì)報(bào)錯(cuò)。
- 參數(shù)mode是文件和目錄的權(quán)限設(shè)置,默認(rèn)是666,代表可讀和可寫(xiě)。具體解釋參考以下chmod函數(shù)的介紹。
測(cè)試代碼:
#初始化時(shí)隨便寫(xiě)了一個(gè)文件名
path_ins= Path('1.txt')
Path_ins.touch()執(zhí)行結(jié)果:在本地目錄新建了一個(gè)1.txt的空文件。
14 Path.mkdir()
默認(rèn)情況下該方法用于創(chuàng)建多個(gè)新的空文件夾,如果父文件夾或者子文件夾存在時(shí),則報(bào)錯(cuò)。
功能類似于os.makedirs()函數(shù)

- 參數(shù)exist_ok=True時(shí),則不在檢查子文件夾是否已經(jīng)存在。
- 參數(shù)parents=True時(shí),則不在檢查父文件夾是否已經(jīng)存在。
測(cè)試代碼:
初始化時(shí)隨便寫(xiě)了兩個(gè)文件夾路徑
path_ins= Path('2/2')
path_ins.mkdir(parents=True,exist_ok=True)
path_ins.mkdir()執(zhí)行結(jié)果:在本地目錄新建了文件夾2,在文件夾2中又創(chuàng)建了文件夾2,當(dāng)文件夾存在時(shí)最后的語(yǔ)句執(zhí)行會(huì)報(bào)錯(cuò)FileExistsError。
15 Path.rmdir()
刪除空文件夾,如果不是空文件夾則報(bào)錯(cuò),功能類似于os.rmdir()函數(shù)

16 Path.rename(target)
將傳入的路徑重新命名為目標(biāo)路徑。

測(cè)試代碼:
先初始化Path類,將config.txt命名為cfg.txt
path_ins= Path('config.txt')
path_ins.rename('cfg.txt')17 Path.exits()
判斷路徑是否存在。功能類似于os.path.exits(path)

18 Path.is_file()
檢查路徑是否是一個(gè)文件。功能類似于os.path.isfile(path)

19 Path.is_dir()
檢查路徑是否是一個(gè)目錄。功能類似于os.path.isdir(path)

20 Path.chmod()
更改目錄或文件的權(quán)限。功能類似于os.chmod(),這在linux機(jī)器上比較常用,在windows下不太常用。

mode權(quán)限模式可以使用八進(jìn)制數(shù)(如0o755),由三個(gè)部分組成,每個(gè)部分表示不同的用戶組對(duì)文件的權(quán)限:文件所有者(Owner)、所屬組(Group)、其他用戶(Others)。
文件權(quán)限類型:?jiǎn)蝹€(gè)數(shù)字最大為4+2+1=7
- 讀(r):值為4,表示可以讀取文件內(nèi)容。
- 寫(xiě)(w):值為2,表示可以修改文件內(nèi)容。
- 執(zhí)行(x):值為1,表示可以執(zhí)行該文件或者訪問(wèn)該目錄。
常見(jiàn)權(quán)限設(shè)置:
chmod 755:所有者具有讀、寫(xiě)、執(zhí)行權(quán)限;所屬組和其他用戶具有讀、執(zhí)行權(quán)限。
chmod 777:所有者,所屬組和其他用戶都具有讀、寫(xiě)、執(zhí)行權(quán)限。
測(cè)試代碼:
path_ins= Path('config3.txt')
print(path_ins.chmod(0o755))到此這篇關(guān)于python內(nèi)置模塊pathlib.Path類操作目錄和文件的使用的文章就介紹到這了,更多相關(guān)python pathlib.Path操作目錄和文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python實(shí)現(xiàn)本地音樂(lè)播放器的制作
這篇文章主要介紹了如何利用Python實(shí)現(xiàn)本地音樂(lè)播放器的制作,并且可以選擇需要播放的音樂(lè)的路徑,選擇播放方式,感興趣的小伙伴可以了解一下2022-06-06
python multiprocessing多進(jìn)程變量共享與加鎖的實(shí)現(xiàn)
這篇文章主要介紹了python multiprocessing多進(jìn)程變量共享與加鎖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
如何在Flask中實(shí)現(xiàn)數(shù)據(jù)分組流程詳解
在Flask中,數(shù)據(jù)分組是指將一組數(shù)據(jù)按照某種方式進(jìn)行分類,以便更好地對(duì)數(shù)據(jù)進(jìn)行處理和展示,可以使用Python內(nèi)置的itertools模塊中的groupby方法,或者使用SQL語(yǔ)句中的GROUP?BY子句來(lái)實(shí)現(xiàn)數(shù)據(jù)分組,這篇文章介紹了在Flask中實(shí)現(xiàn)數(shù)據(jù)分組,感興趣的同學(xué)可以參考下文2023-05-05
PyG搭建GCN模型實(shí)現(xiàn)節(jié)點(diǎn)分類GCNConv參數(shù)詳解
這篇文章主要為大家介紹了PyG搭建GCN模型實(shí)現(xiàn)節(jié)點(diǎn)分類GCNConv參數(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
關(guān)于你不想知道的所有Python3 unicode特性
我的讀者知道我是一個(gè)喜歡痛罵Python3 unicode的人。這次也不例外。我將會(huì)告訴你用unicode有多痛苦和為什么我不能閉嘴。我花了兩周時(shí)間研究Python3,我需要發(fā)泄我的失望。在這些責(zé)罵中,仍然有有用的信息,因?yàn)樗涛覀內(nèi)绾蝸?lái)處理Python3。如果沒(méi)有被我煩到,就讀一讀吧2014-11-11
python實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖書(shū)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03

