Pathlib庫Python面向對象的文件路徑處理

      網友投稿 1009 2022-05-30

      目錄

      前言

      建立路徑

      joinPath()

      路徑格式化

      with_name()與with_suffix()

      解析路徑

      home()與cwd()

      獲取當前路徑下的所有文件路徑

      設置條件獲取文件(glob()與rglob())

      讀寫文件

      刪除文件夾

      文件屬性

      文件判斷

      創建快捷方式

      前言

      Pathlib庫提供了一個面向對象的API來解析,建立,測試和處理文件名和路徑,而不是使用底層字符串操作。

      其中Pathlib庫有2個非常關鍵的類名:PurePosixPath,PureWindowsPath。它們可以在任意操作系統上實例化和使用,因為它們只處理文件名與目錄名。

      要實例化一個具體的類來處理真正的文件系統,需要使用Path得到一個PosixPath或WindowsPath,至于取哪個,取決于你是什么系統。

      建立路徑

      下面,我們來通過Pathlib庫建立路徑。示例如下:

      import pathlib users = pathlib.PurePosixPath('/Users') print(users) users_liyuanjing = users / 'liyuanjinglyj' print(users_liyuanjing) users_yellow = users / pathlib.PurePosixPath('yellow') print(users_yellow) users_etc = users / '/ect/' print(users_etc)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      運行之后,效果如下:

      如上面代碼所示,我們通過PurePosixPath實例化一個新路徑,新路徑的對象表示的就是這個字符串的值。

      而像之前使用os.path.join()組合路徑,這里可以直接使用"/"符號進行拼接,即可以拼接字符串,也可以在拼接一個新路徑的PurePosixPath對象。不過,有一點和os.path.join()一樣,就是組合路徑中,一旦后面也有“/”符號,那么就會舍棄前面的路徑,比如最后的/etc路徑。

      joinPath()

      既然提到了os.path.join()函數,我們就先來介紹一個Pathlib庫中很像它的函數:joinPath()。它也是用于拼接路徑的,具體示例如下:

      import pathlib users = pathlib.PurePosixPath() paths = ['liyuanjinglyj', 'yellow'] result = users.joinpath(*paths) print(result)

      1

      2

      3

      4

      5

      6

      運行之后,效果如下:

      路徑格式化

      既然是字符串路徑,那么拼接的時候,肯定會有不規范的地方。所以,我們需要使用resolve()函數進行字符串路徑規范化,示例如下:

      import pathlib users = pathlib.Path() result = users / '..' / 'liyuanjing' print(result.resolve()) users = pathlib.Path('/Users/local') result = users / '..' / 'liyuanjing' print(result.resolve())

      1

      2

      3

      4

      5

      6

      7

      8

      9

      運行之后,效果如下:

      如上圖所示,它會自動格式化路徑,同時轉化為絕對路徑。

      with_name()與with_suffix()

      with_name():創建一個新路徑,將一個路徑中的文件名替換成為另一個不同的文件名。

      with_suffix():創建一個新路徑,將文件名的擴展名替換為一個不同的值。

      示例如下:

      import pathlib one = pathlib.PurePosixPath('/base_demo/demo.py') print(one) two = one.with_name("yellow.py") print(two) three = two.with_suffix(".pyc") print(three)

      1

      Pathlib庫:Python面向對象的文件路徑處理

      2

      3

      4

      5

      6

      7

      8

      運行之后,效果如下:

      如上圖所示,with_name將文件名demo替換成了yellow。而with_suffix將文件名后綴py替換成了pyc。

      解析路徑

      既然有組合路徑,替換路徑等。那么也會有解析路徑,畢竟有時候我們只想要文件名,那么就必須分解路徑。

      分解路徑會用到PurePosixPath成員變量parts,示例如下:

      import pathlib one = pathlib.PurePosixPath('D:/Users/base_demo/demo.py') print(one.parts)

      1

      2

      3

      4

      運行之后,效果如下:

      可以看到,這里將路徑中的所有“/”分割的符號都分解了,最后一個肯定就是文件名或者文件(只有文件的話)。

      既然這里,我們可以通過一層層的分解得到各個文件的名稱,那么PurePosixPath類也肯定有層級給文件名分類,比如像獲取某個文件的父目錄,可以通過如下代碼做到:

      import pathlib one = pathlib.PurePosixPath('D:/Users/base_demo/demo.py') print(one.parent) print("----------") for name in one.parents: print(name)

      1

      2

      3

      4

      5

      6

      7

      運行之后,效果如下:

      通過parents,我們可以一級一級的返回其父親目錄,直到根目錄為止。

      這里,還有一些成員變量在實際的應用中會經常的用到,示例如下:

      import pathlib one = pathlib.PurePosixPath('D:/Users/base_demo/demo.py') print(one.name) print(one.suffix) print(one.stem)

      1

      2

      3

      4

      5

      6

      運行之后,效果如下:

      name:用于獲取最后的文件名與后綴。

      suffix:用于獲取文件名的后綴

      stem:用于獲取文件名不要后綴

      home()與cwd()

      home():直接生成系統用戶目錄的路徑

      cwd():用于獲取項目的絕對路徑

      示例如下:

      import pathlib one = pathlib.Path.home() print(one) two = pathlib.Path.cwd() print(two)

      1

      2

      3

      4

      5

      6

      運行之后,效果如下:

      獲取當前路徑下的所有文件路徑

      在編寫文件夾應用之時,我們每訪問一個目錄都會顯示該目錄下的所有文件與文件夾。而Pathlib庫也能夠做到這些,具體代碼很簡單,迭代iterdir()就行,示例如下:

      import pathlib one = pathlib.Path.cwd() two = pathlib.Path('.') for f1, f2 in zip(one.iterdir(), two.iterdir()): print('{} : {}'.format(f1, f2))

      1

      2

      3

      4

      5

      6

      運行之后,效果如下:

      設置條件獲取文件(glob()與rglob())

      在遍歷獲取文件時,我們可能并不需要獲取所有文件,而只要獲取某些特定后綴的文件。比如上面的目錄中,我們只需要txt后綴的文本怎么辦?

      可以直接使用glob()進行過濾,示例如下:

      import pathlib one = pathlib.Path('.') for f in one.glob('*.txt'): print(f)

      1

      2

      3

      4

      5

      運行之后,效果如下:

      glob()與rglob()不同之處,在于rglob()是遞歸的,比如這層測試目錄一直有一個.idea文件夾,使用glob()不會遍歷到.idea文件夾里面的文件,而rglob()就會,而且只要繼續有層級,會一直遍歷符合條件的數據。

      示例如下:

      import pathlib one = pathlib.Path('.') for f in one.rglob('*'): print(f)

      1

      2

      3

      4

      5

      運行之后,效果如下:

      讀寫文件

      既然通過Pathlib庫管理文件非常的方便,那么它能過讀寫文件,是不是就是一個完美的文件操作庫呢?

      其實,Pathlib庫還真能直接對文件進行讀寫。下面,我們隨機創建一個文件進行讀寫操作,示例如下:

      import pathlib f = pathlib.Path('text.txt') f.write_bytes("My name is Li Yuanjing".encode('utf-8')) with f.open('r',encoding='utf-8') as content: print(content.read()) print(f.read_text('utf-8'))

      1

      2

      3

      4

      5

      6

      7

      8

      9

      運行之后,效果如下:

      這里,我們使用2種讀取文件的方式,一種是通過with f.open()讀取文件,一種是直接使用read_text()進行讀取。唯一不同的是,如果要一行一行讀取,可能前一種方式更合適。而寫入文件直接使用write_bytes()函數就行,不過需要記得給寫入內容指定編碼。(當然直接寫字符串可以用write_text()函數)

      至于創建文件夾,直接使用f.mkdir()就行。

      刪除文件夾

      在實際的文件操作中,我們還需要刪除文件夾或者文件。而Pathlib庫給我們提供了rmdir()函數進行空文件夾的刪除,示例如下:

      import pathlib f = pathlib.Path('123') f.rmdir()

      1

      2

      3

      4

      如果文件夾不是空的,會直接報錯,當然如果是空的就直接成功刪除了。

      如果是要刪除文件,可以使用unlink()函數進行操作,示例如下:

      import pathlib f = pathlib.Path('a.txt') f.unlink()

      1

      2

      3

      4

      文件屬性

      在編寫文件管理器應用時,我們往往還會獲取文件的屬性,比如創建時間,修改時間等等。Pathlib庫可以很方便的獲取這些數據的集合,示例如下:

      import pathlib f = pathlib.Path('英文文檔.txt') stat_info=f.stat() print(stat_info)

      1

      2

      3

      4

      5

      運行之后,效果如下:

      這里一共獲取到文件的10個屬性,具體含義如下表:

      文件判斷

      os.path庫有一大堆返回布爾類型的函數進行文件的判斷,同樣的Pathlib庫也可以進行這些判斷。博主這里列出了一張表格,判斷文件的函數如下:

      創建快捷方式

      在Windows系統中,我們經常使用的桌面圖標就是應用程序的快捷方式,真正的exe運行程序其實在安裝目錄,而通過Pathlib庫我們也可以直接創建文件的快捷打開方式。示例如下:

      import pathlib f = pathlib.Path('1234.txt') f.symlink_to('英文文檔.txt')

      1

      2

      3

      4

      運行之后,你會發現打開1234.txt也就是打開了英文文檔.txt,兩者內容一樣。效果如下:

      需要注意的是,直接運行程序會報錯,因為Windows生成快捷方式需要管理員權限,所以在運行腳本時,記得一定要給權限。(以管理員的方式運行)

      Python 面向對象編程

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:利用kubeadm安裝centos7.4三節點K8S-1.11版本集群-詳細安裝過程記錄
      下一篇:詳細介紹安卓布局性能優化之(include 、merge、ViewStub)
      相關文章
      4338×亚洲全国最大色成网站| 色婷婷六月亚洲婷婷丁香| 中文字幕亚洲精品资源网| 中文字幕亚洲专区| 亚洲JLZZJLZZ少妇| 亚洲欧美在线x视频| 亚洲AV网一区二区三区| 亚洲av日韩aⅴ无码色老头| 久久精品国产亚洲AV天海翼| 色综合久久精品亚洲国产| 相泽南亚洲一区二区在线播放| 精品国产亚洲一区二区三区在线观看| 日韩欧美亚洲国产精品字幕久久久 | 亚洲va在线va天堂va四虎| 亚洲va无码专区国产乱码| 亚洲av不卡一区二区三区 | 亚洲AV无码一区二区三区牲色| 国产人成亚洲第一网站在线播放| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 亚洲色成人中文字幕网站 | 亚洲中文字幕无码爆乳| 亚洲人成色4444在线观看| 亚洲AV无码专区在线厂| 亚洲午夜无码AV毛片久久| 夜夜春亚洲嫩草影院| 亚洲av无码潮喷在线观看| 久久水蜜桃亚洲av无码精品麻豆| 亚洲欧洲日产专区| 77777亚洲午夜久久多喷| 亚洲精品无码国产片| 国产亚洲午夜精品| 亚洲午夜无码AV毛片久久| 久久久久久a亚洲欧洲aⅴ| 亚洲天堂一区二区| 亚洲综合色区中文字幕| 亚洲国产成人久久精品大牛影视| 久久无码av亚洲精品色午夜| 精品亚洲成α人无码成α在线观看 | 亚洲一区二区三区写真| 国产精品亚洲精品爽爽| 国产亚洲精品成人a v小说|