Python中pathlib庫(kù)的使用小結(jié)
1.pathlib庫(kù)介紹
相比常用的 os.path 而言,pathlib 對(duì)于目錄路徑的操作更簡(jiǎn)潔也更貼近 Pythonic(Python代碼風(fēng)格的)。但是它不單純是為了簡(jiǎn)化操作,還有更大的用途。
pathlib 是Python內(nèi)置庫(kù),Python 文檔給它的定義是:
The pathlib module – object-oriented filesystem paths(面向?qū)ο蟮奈募到y(tǒng)路徑)
pathlib 提供表示文件系統(tǒng)路徑的類,其語(yǔ)義適用于不同的操作系統(tǒng)。

2.pathlib庫(kù)下Path類的基本使用
2.1 獲取文件名
from pathlib import Path # 導(dǎo)入pathlib的Path類
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb"
p = Path(path)
print(f"獲取文件名:{p.name}") # 獲取文件名:pathlib庫(kù)的使用.ipynb
2.2 獲取文件前綴和后綴 ——.stem&.suffix
from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb"
p = Path(path)
print(f"獲取前綴:{p.stem}") # 獲取前綴:pathlib庫(kù)的使用
print(f"獲取后綴:{p.suffix}") # 獲取后綴:.ipynb
2.3 獲取文件的文件夾及上一級(jí)、上上級(jí)文件夾 ——.parent
from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb"
p = Path(path)
print(f"獲取當(dāng)前文件所屬文件夾:{p.parent}")
print(f"獲取上一級(jí)文件夾:{p.parent.parent}")
print(f"獲取上上一級(jí)文件夾:{p.parent.parent.parent}")
"""
獲取當(dāng)前文件所屬文件夾:/home/leovin/JupyterNotebookFolders
獲取上一級(jí)文件夾:/home/leovin
獲取上上一級(jí)文件夾:/home
"""
Note: 最上級(jí)的文件夾是一個(gè)/??
2.4 獲取該文件所屬的文件夾及其父文件夾 ——.parents
from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb"
p = Path(path)
print(f"獲取當(dāng)前文件所屬文件夾及其父文件夾:{p.parents}\n")
# 遍歷
for idx, folder_path in enumerate(p.parents):
print(f"No.{idx}: {folder_path}")
"""
獲取當(dāng)前文件所屬文件夾及其父文件夾:<PosixPath.parents>
No.0: /home/leovin/JupyterNotebookFolders
No.1: /home/leovin
No.2: /home
No.3: /
"""
2.5 文件絕對(duì)路徑按照/進(jìn)行分割 ——.parts
from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb"
p = Path(path)
print(f"將文件的絕對(duì)路徑按照`/`進(jìn)行分割,返回一個(gè)tuple:{p.parts}\n")
# 遍歷
for idx, element in enumerate(p.parts):
print(f"No.{idx}: {element}")
"""
獲取當(dāng)前文件所屬文件夾及其父文件夾:<PosixPath.parents>
No.0: /
No.1: home
No.2: leovin
No.3: JupyterNotebookFolders
No.4: pathlib庫(kù)的使用.ipynb
"""
2.6 獲取當(dāng)前工作目錄 ——Path.cwd()
from pathlib import Path
import os
path_1 = Path.cwd()
path_2 = os.getcwd()
print(f"Path.cwd(): {path_1}")
print(f"os.getcwd(): {path_2}")
"""
Path.cwd(): /home/leovin/JupyterNotebookFolders
os.getcwd(): /home/leovin/JupyterNotebookFolders
"""
2.7 獲取用戶home目錄路徑 ——Path.home()系列
from pathlib import Path
print(f"獲取用戶home路徑: {Path.home()}")
"""
獲取用戶home路徑: /home/leovin
"""
2.8 獲取文件詳細(xì)信息 ——object.stat()
from pathlib import Path
p = Path("/home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb")
print(f"獲取文件詳細(xì)信息: {p.stat()}\n")
print(f"獲取文件字節(jié)大小: {p.stat().st_size}\n")
print(f"獲取文件創(chuàng)建時(shí)間: {p.stat().st_ctime}\n") # c: create
print(f"獲取文件上次修改時(shí)間: {p.stat().st_mtime}\n") # m:: modify
"""
獲取文件詳細(xì)信息: os.stat_result(st_mode=33204, st_ino=23860358, st_dev=2052, st_nlink=1, st_uid=1000, st_gid=1000, st_size=12125, st_atime=1653039478, st_mtime=1653039478, st_ctime=1653039478)
獲取文件字節(jié)大小: 12125
獲取文件創(chuàng)建時(shí)間: 1653039478.703161
獲取文件上次修改時(shí)間: 1653039478.703161
"""
可以看到,object.stat().xxx就是在調(diào)用attr ??
2.9 檢查目錄或者文件是否存在 ——Path("路徑").exists()
from pathlib import Path
print(f"目標(biāo)路徑的文件是否存在: {Path('/home/leovin/JupyterNotebookFolders/xxx').exists()}") # False
print(f"目標(biāo)路徑的文件是否存在: {Path('/home/leovin/JupyterNotebookFolders').exists()}") # True
2.10 檢查指定指定路徑是否為folder或者file ——Path("路徑").is_file()&Path("路徑").is_dir()
from pathlib import Path
print(f"目標(biāo)路徑是否為文件: {Path('/home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb').is_file()}") # True
print(f"目標(biāo)路徑是否為文件夾: {Path('/home/leovin/JupyterNotebookFolders/').is_dir()}") # True
directory為文件夾
2.11 將相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑 ——Path("路徑").resolve()
from pathlib import Path
print(f"轉(zhuǎn)換前的路徑為: {Path('./pathlib庫(kù)的使用.ipynb')}")
print(f"轉(zhuǎn)換后的路徑為: {Path('./pathlib庫(kù)的使用.ipynb').resolve()}")
"""
轉(zhuǎn)換前的路徑為: pathlib庫(kù)的使用.ipynb
轉(zhuǎn)換后的路徑為: /home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb
"""
2.12 遍歷一個(gè)目錄 ——Path("路徑").iterdir()
from pathlib import Path
path_object = Path("/home/leovin/JupyterNotebookFolders/").iterdir()
print(f"path_object: {path_object}") # path_object: <generator object Path.iterdir at 0x7f0ca0061c10>
# 迭代目錄對(duì)象
for idx, element in enumerate(path_object):
print(f"No.{idx}: {element}")
"""
path_object: <generator object Path.iterdir at 0x7f0ca0061c10>
No.0: /home/leovin/JupyterNotebookFolders/temp
No.1: /home/leovin/JupyterNotebookFolders/torch.meshgrid().ipynb
No.2: /home/leovin/JupyterNotebookFolders/array.argsort().ipynb
No.3: /home/leovin/JupyterNotebookFolders/切片....ipynb
No.4: /home/leovin/JupyterNotebookFolders/logging信息.log
No.5: /home/leovin/JupyterNotebookFolders/Python中類的私有變量、私有方法、靜態(tài)方法.ipynb
No.6: /home/leovin/JupyterNotebookFolders/temp_file.ipynb
No.7: /home/leovin/JupyterNotebookFolders/example.log
No.8: /home/leovin/JupyterNotebookFolders/Python語(yǔ)法.ipynb
No.9: /home/leovin/JupyterNotebookFolders/.ipynb_checkpoints
No.10: /home/leovin/JupyterNotebookFolders/craw.data.txt
No.11: /home/leovin/JupyterNotebookFolders/test.txt
No.12: /home/leovin/JupyterNotebookFolders/logging的學(xué)習(xí).ipynb
No.13: /home/leovin/JupyterNotebookFolders/Test.ipynb
No.14: /home/leovin/JupyterNotebookFolders/算法題
No.15: /home/leovin/JupyterNotebookFolders/functions.ipynb
No.16: /home/leovin/JupyterNotebookFolders/mask轉(zhuǎn)0&1.ipynb
No.17: /home/leovin/JupyterNotebookFolders/Multi_Task_in_Python.ipynb
No.18: /home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb
No.19: /home/leovin/JupyterNotebookFolders/三種激活函數(shù)繪制.ipynb
"""
2.13 獲取所有符合pattern的文件 ——Path("路徑").glob("folder1/xxx.格式")
from pathlib import Path
pattern = "JupyterNotebookFolders/*.ipynb"
glob_generator = Path("/home/leovin/").glob(pattern)
# 遍歷返回的對(duì)象 -> 返回的是絕對(duì)路徑
for idx, element in enumerate(glob_generator):
print(f"No.{idx}: {element}")
"""
No.0: /home/leovin/JupyterNotebookFolders/torch.meshgrid().ipynb
No.1: /home/leovin/JupyterNotebookFolders/array.argsort().ipynb
No.2: /home/leovin/JupyterNotebookFolders/切片....ipynb
No.3: /home/leovin/JupyterNotebookFolders/Python中類的私有變量、私有方法、靜態(tài)方法.ipynb
No.4: /home/leovin/JupyterNotebookFolders/temp_file.ipynb
No.5: /home/leovin/JupyterNotebookFolders/Python語(yǔ)法.ipynb
No.6: /home/leovin/JupyterNotebookFolders/logging的學(xué)習(xí).ipynb
No.7: /home/leovin/JupyterNotebookFolders/Test.ipynb
No.8: /home/leovin/JupyterNotebookFolders/functions.ipynb
No.9: /home/leovin/JupyterNotebookFolders/mask轉(zhuǎn)0&1.ipynb
No.10: /home/leovin/JupyterNotebookFolders/Multi_Task_in_Python.ipynb
No.11: /home/leovin/JupyterNotebookFolders/pathlib庫(kù)的使用.ipynb
No.12: /home/leovin/JupyterNotebookFolders/三種激活函數(shù)繪制.ipynb
"""
2.14 刪除文件(非目錄)——Path("路徑").unlink()
from pathlib import Path
# 當(dāng)前文件夾下的txt文件
for idx, element in enumerate(Path("./").glob("*.txt")):
print(f"No.{idx}: {element}")
print("-" * 30)
"""
刪除指定的文件(非目錄)
1. 是真的刪除而非unlink
2. 如果文件不存在則保存
"""
try:
Path("./will_be_deleted.txt").unlink()
except Exception as e:
print(f"刪除文件發(fā)生錯(cuò)誤,原因?yàn)? {e}")
# 當(dāng)前文件夾下的txt文件
for idx, element in enumerate(Path("./").glob("*.txt")):
print(f"No.{idx}: {element}")
"""
No.0: will_be_deleted.txt
No.1: craw.data.txt
No.2: test.txt
------------------------------
No.0: craw.data.txt
No.1: test.txt
報(bào)錯(cuò)的輸出:
No.0: craw.data.txt
No.1: test.txt
------------------------------
刪除文件發(fā)生錯(cuò)誤,原因?yàn)? [Errno 2] No such file or directory: 'will_be_deleted.txt'
No.0: craw.data.txt
No.1: test.txt
"""
3.pathlib庫(kù)與os庫(kù)的對(duì)比
| os庫(kù) | pathlib庫(kù) | 描述 | 英文說(shuō)明 |
|---|---|---|---|
| os.path.abspath(("文件路徑")) | Path("文件路徑").resolve() | 將路徑轉(zhuǎn)換為絕對(duì)路徑 | - |
| os.chmod() | Path("文件路徑").chmod(xxx) | 更改文件權(quán)限 | change mode |
| os.mkdir(("文件路徑")) | Path("文件路徑").mkdir() | 新建文件夾 | make directory |
| os.rename("文件路徑", "xxx") | Path("文件路徑").rename("xxx") | 重命名文件/文件夾名稱 | - |
| os.replace(a, b) | Path("文件路徑").replace(a, b) | 替換字符串 | - |
| os.rmdir() | Path("文件路徑").rmdir() | 刪除文件夾(里面必須是空的) | remove directory |
| os.remove("文件路徑") / os.unlink("文件路徑") | Path("文件路徑").unlink() | 刪除文件(非目錄) | - |
| os.getcwd() | Path("文件路徑").cwd() | 獲取當(dāng)前文件工作目錄 | current work directory |
| os.path.isdir() | Path("文件路徑").is_dir() | 判斷當(dāng)前路徑是否為目錄 | - |
| os.path.isfile() | Path("文件路徑").is_file() | 判斷當(dāng)前路徑是否為文件 | - |
| os.stat() | Path("文件路徑").stat() | 返回當(dāng)前路徑的信息 | status |
| os.path.isabs() | Path("文件路徑").is_absolute() | 判斷當(dāng)前路徑是否為絕對(duì)路徑 | - |
| os.path.basename() | Path("文件路徑").name | 返回文件/目錄的基礎(chǔ)名稱(不帶路徑) | - |
| os.path.dirname() | Path("文件路徑").parent | 返回路徑所屬文件夾名稱 | - |
| os.path.samefile() | Path("文件路徑").samefile(xxx) | 判斷兩個(gè)文件是否相同 | - |
| os.path.splitext("文件路徑") | (Path("文件路徑").stem, Path("文件路徑").suffix) | 將文件名分離,分成前綴和后綴 | stem + suffix |
參考
- http://www.dhdzp.com/article/193402.htm
- https://docs.python.org/zh-cn/3/library/pathlib.html?highlight=pathlib#module-pathlib
到此這篇關(guān)于Python中pathlib庫(kù)的使用小結(jié)的文章就介紹到這了,更多相關(guān)Python pathlib庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 對(duì)python3中pathlib庫(kù)的Path類的使用詳解
- python中pathlib模塊的基本用法與總結(jié)
- python3 pathlib庫(kù)Path類方法總結(jié)
- Python標(biāo)準(zhǔn)庫(kù)pathlib操作目錄和文件
- Python中的pathlib庫(kù)使用詳解
- 一文帶你掌握Python中pathlib模塊的用法
- Python pathlib模塊實(shí)例詳解
- python中pathlib 面向?qū)ο蟮奈募到y(tǒng)路徑
- Python文件系統(tǒng)模塊pathlib庫(kù)
- Python pathlib模塊使用方法及實(shí)例解析
- Python如何使用pathlib模塊處理文件路徑
相關(guān)文章
Python實(shí)現(xiàn)藍(lán)線挑戰(zhàn)特效的示例代碼
在抖音曾經(jīng)火了一陣子的藍(lán)線挑戰(zhàn)特效,其原理很簡(jiǎn)單。本文將試著用opencv-python實(shí)現(xiàn)這個(gè)效果,做了攝像頭版本和視頻處理版本,感興趣的可以學(xué)習(xí)一下2022-10-10
基于Python爬取51cto博客頁(yè)面信息過(guò)程解析
這篇文章主要介紹了基于Python爬取51cto博客頁(yè)面信息過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
python print()函數(shù)的end參數(shù)和sep參數(shù)的用法說(shuō)明
這篇文章主要介紹了python print()函數(shù)的end參數(shù)和sep參數(shù)的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
Python中函數(shù)的創(chuàng)建與調(diào)用你了解嗎
這篇文章主要為大家詳細(xì)介紹了Python中函數(shù)的創(chuàng)建與調(diào)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03
mat矩陣和npy矩陣實(shí)現(xiàn)互相轉(zhuǎn)換(python和matlab)
這篇文章主要介紹了mat矩陣和npy矩陣實(shí)現(xiàn)互相轉(zhuǎn)換(python和matlab),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
使用tensorflow顯示pb模型的所有網(wǎng)絡(luò)結(jié)點(diǎn)方式
今天小編就為大家分享一篇使用tensorflow顯示pb模型的所有網(wǎng)絡(luò)結(jié)點(diǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01

