Python使用pathlib進(jìn)行文件系統(tǒng)操作
pathlib 是 Python 的一個(gè)標(biāo)準(zhǔn)庫,它提供了一個(gè)面向?qū)ο蟮奈募到y(tǒng)路徑操作接口。使用 pathlib,你可以以一種更直觀和更易于理解的方式處理文件路徑,而不必使用字符串操作來分割和連接路徑。
os模塊 vs pathlib
在Python 3.4之前,處理文件路徑的更傳統(tǒng)的方法是使用os模塊。
我們可以通過考慮數(shù)據(jù)科學(xué)中的一個(gè)常見任務(wù)來展示pathlib的獨(dú)特價(jià)值:如何找到給定目錄及其所有子目錄中的所有png文件。
如果我們使用的是os模塊,我們可能會編寫以下代碼:
import os dir_path = "/home/user/documents" files = [ os.path.join(dir_path, f) for f in os.listdir(dir_path) if os.path.isfile(os.path.join(dir_path, f)) and f.endswith(".png") ]
雖然這段代碼解決了查找png文件的即時(shí)任務(wù),但它揭示了os模塊的幾個(gè)主要缺點(diǎn)。首先,代碼很長,幾乎不可讀,這是一個(gè)遺憾,考慮到這是一個(gè)相對簡單的操作。第二點(diǎn),我們的代碼假設(shè)了列表解析的知識,這不應(yīng)該被認(rèn)為是理所當(dāng)然的。第三點(diǎn),代碼涉及字符串操作,這是容易出錯(cuò)的。最重要的是,代碼不是很簡潔。
相反,如果我們使用pathlib模塊,我們的代碼會簡單得多。正如我們所提到的,pathlib提供了一種面向?qū)ο蟮姆椒▉硖幚砦募到y(tǒng)路徑。
from pathlib import Path # Create a path object dir_path = Path(dir_path) # Find all text files inside a directory files = list(dir_path.glob("*.png"))
這種面向?qū)ο蟮木幊虈@對象及其交互來組織代碼,從而產(chǎn)生更多的模塊化、可重用和可維護(hù)的代碼。
在Python中使用Path對象
pathlib庫圍繞所謂的Path對象展開,paths對象是一種以結(jié)構(gòu)化和平臺 獨(dú)立的方式。
我們使用以下代碼行將Path類從pathlib模塊引入到當(dāng)前的命名空間中:
from pathlib import Path
從pathlib調(diào)用Path類后,我們可以通過多種方式創(chuàng)建Path對象,包括從字符串、從其他Path對象、從當(dāng)前工作目錄和從主目錄。
從字符串創(chuàng)建路徑對象
我們可以通過將表示文件系統(tǒng)路徑的字符串傳遞給變量來創(chuàng)建Path對象。這將文件路徑的字符串表示形式轉(zhuǎn)換為Path對象。
file_path_str = "data/union_data.csv" data_path = Path(file_path_str)
從其他路徑對象創(chuàng)建
現(xiàn)有的Path對象可以用作創(chuàng)建新路徑的構(gòu)建塊。
我們通過將基本路徑、數(shù)據(jù)目錄和文件名組合成一個(gè)文件路徑來實(shí)現(xiàn)這一點(diǎn)。我們必須記住在適當(dāng)?shù)牡胤绞褂谜备軄頂U(kuò)展Path對象。
base_path = Path("/home/user") data_dir = Path("data") # Combining multiple paths file_path = base_path / data_dir / "prices.csv" print(file_path)
輸出
'/home/user/data/prices.csv'
從當(dāng)前工作目錄創(chuàng)建路徑對象
這里我們使用Path.cwd()方法將當(dāng)前工作目錄分配給cwd變量。然后,我們可以檢索腳本運(yùn)行的當(dāng)前工作目錄的路徑。
cwd = Path.cwd() ???????print(cwd)
輸出
'/home/bexgboost/articles/2024/4_april/8_pathlib'
從主工作目錄創(chuàng)建路徑對象
我們可以通過將主目錄與其他子目錄組合來構(gòu)造路徑。在這里,我們將主目錄與子目錄“downloads”和“projects”合并。"
home = Path.home() ???????home / "downloads" / "projects"
重要提示:Path類本身不執(zhí)行任何文件系統(tǒng)操作,如路徑驗(yàn)證、創(chuàng)建目錄或文件。它被設(shè)計(jì)用于表示和操作路徑。要與文件系統(tǒng)進(jìn)行實(shí)際交互(檢查是否存在,閱讀/寫入文件),我們必須使用Path對象的特殊方法,對于某些高級情況,請從os模塊獲得幫助。
在Python中使用Path組件
文件路徑屬性是文件路徑的各種屬性和組件,有助于識別和管理文件系統(tǒng)中的文件和目錄。就像物理地址有不同的部分,如街道號碼,城市,國家和郵政編碼,文件系統(tǒng)路徑可以分解為更小的組件。pathlib允許我們通過點(diǎn)表示法使用路徑屬性訪問和操作這些組件。
使用根目錄
根目錄是文件系統(tǒng)中最頂層的目錄。在類Unix系統(tǒng)中,它由正斜杠(/)表示。在Windows中,它通常是一個(gè)驅(qū)動器號后跟一個(gè)冒號,如C:。
image_file = home / "downloads" / "midjourney.png" image_file.root
輸出
'/'
使用父目錄
父級包含當(dāng)前文件或目錄。它相對于當(dāng)前目錄或文件高一級。
image_file.parent
輸出
PosixPath('/home/bexgboost/downloads')
使用文件名
此屬性以字符串形式返回整個(gè)文件名,包括擴(kuò)展名。
image_file.name
輸出
'midjourney.png'
使用文件后綴
suffix屬性以字符串形式返回文件擴(kuò)展名,包括點(diǎn)(如果沒有擴(kuò)展名,則返回空字符串)。
image_file.suffix
輸出
'.png'
注意:在Mac上,文件路徑區(qū)分大小寫,因此/Users/username/Documents和/users/username/documents會有所不同。
.parts屬性
我們可以使用.parts屬性將Path對象拆分為它的組件。
image_file.parts
輸出
('/', 'home', 'bexgboost', 'downloads', 'midjourney.png')
使用pathlib的常見路徑操作
以下是一些使用 pathlib 進(jìn)行常見路徑操作的示例:
1.創(chuàng)建路徑對象:
from pathlib import Path p = Path("/usr/bin")
2.路徑拼接:
new_path = p / "local" / "script.py"
3.獲取文件擴(kuò)展名:
extension = new_path.suffix
4.更改文件擴(kuò)展名:
new_extension = new_path.with_suffix(".txt")
5.檢查路徑是否存在:
exists = new_path.exists()
6.檢查路徑是否為文件:
is_file = new_path.is_file()
7.檢查路徑是否為目錄:
is_dir = new_path.is_dir()
8.讀取文件內(nèi)容:
with new_path.open('r') as file: content = file.read()
9.寫入文件內(nèi)容:
with new_path.open('w') as file: file.write("Hello, world!")
10.刪除文件:
new_path.unlink()
11.創(chuàng)建目錄:
new_path.mkdir(parents=True, exist_ok=True)
12.刪除目錄:
new_path.rmdir()
14.獲取目錄中的文件和子目錄:
items = list(new_path.iterdir())
15.絕對路徑:
absolute_path = new_path.absolute()
16.相對路徑:
relative_path = new_path.relative_to("/usr")
17.路徑解析:
parts = new_path.parts drive, root, parts = new_path.drive, new_path.root, new_path.parts
18.路徑字符串轉(zhuǎn)換:
path_str = str(new_path)
19.遍歷目錄樹:
for child in new_path.rglob('*.py'): print(child)
這些是 pathlib 模塊提供的一些基本操作。pathlib 模塊使得文件系統(tǒng)路徑的操作更加直觀和易于管理。
到此這篇關(guān)于Python使用pathlib進(jìn)行文件系統(tǒng)操作的文章就介紹到這了,更多相關(guān)Python pathlib文件系統(tǒng)操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python獲取本機(jī)所有網(wǎng)卡ip,掩碼和廣播地址實(shí)例代碼
這篇文章主要介紹了Python獲取本機(jī)所有網(wǎng)卡ip,掩碼和廣播地址實(shí)例代碼,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01haskell實(shí)現(xiàn)多線程服務(wù)器實(shí)例代碼
這篇文章主要介紹了haskell實(shí)現(xiàn)的多線程服務(wù)器,大家參考使用吧2013-11-11python Requsets下載開源網(wǎng)站的代碼(帶索引 數(shù)據(jù))
這篇文章主要介紹了python Requsets下載開源網(wǎng)站的代碼(帶索引 數(shù)據(jù)),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Python對口紅進(jìn)行數(shù)據(jù)分析來選定情人節(jié)禮物
情人節(jié)送小仙女什么禮物?讓我們來用Python對口紅進(jìn)行數(shù)據(jù)分析,那個(gè)女孩子會拒絕這樣精心挑選的禮物,感興趣的小伙伴快來看看吧2022-02-02python登陸asp網(wǎng)站頁面的實(shí)現(xiàn)代碼
這篇文章主要介紹了python登陸asp網(wǎng)站頁面的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-01-01