欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中的pathlib庫使用詳解

 更新時(shí)間:2022年05月21日 11:34:20   作者:Le0v1n  
今天給大家介紹Python中的pathlib庫的操作方法,pathlib?是Python內(nèi)置庫,pathlib庫對于目錄路徑的操作更簡潔也更貼近?Pythonic(Python代碼風(fēng)格的),對Python?pathlib庫相關(guān)知識感興趣的朋友一起看看吧

1. pathlib庫介紹

相比常用的 os.path 而言,pathlib 對于目錄路徑的操作更簡潔也更貼近 Pythonic(Python代碼風(fēng)格的)。但是它不單純是為了簡化操作,還有更大的用途

pathlib 是Python內(nèi)置庫,Python 文檔給它的定義是:

The pathlib module – object-oriented filesystem paths(面向?qū)ο蟮奈募到y(tǒng)路徑)

pathlib 提供表示文件系統(tǒng)路徑的類,其語義適用于不同的操作系統(tǒng)。

2. pathlib庫下Path類的基本使用

2.1 獲取文件名

from pathlib import Path  # 導(dǎo)入pathlib的Path類
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫的使用.ipynb"
p = Path(path)
print(f"獲取文件名:{p.name}")  # 獲取文件名:pathlib庫的使用.ipynb

2.2 獲取文件前綴和后綴

—— .stem & .suffix

from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫的使用.ipynb"
p = Path(path)
print(f"獲取前綴:{p.stem}")  # 獲取前綴:pathlib庫的使用
print(f"獲取后綴:{p.suffix}")  # 獲取后綴:.ipynb

2.3 獲取文件的文件夾及上一級、上上級文件夾

—— .parent

from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫的使用.ipynb"
p = Path(path)
print(f"獲取當(dāng)前文件所屬文件夾:{p.parent}")
print(f"獲取上一級文件夾:{p.parent.parent}")
print(f"獲取上上一級文件夾:{p.parent.parent.parent}")
"""
獲取當(dāng)前文件所屬文件夾:/home/leovin/JupyterNotebookFolders
獲取上一級文件夾:/home/leovin
獲取上上一級文件夾:/home
"""

Note: 最上級的文件夾是一個/

2.4 獲取該文件所屬的文件夾及其父文件夾

—— .parents

from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫的使用.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 文件絕對路徑

按照/進(jìn)行分割 —— .parts

from pathlib import Path
import os
path = "/home/leovin/JupyterNotebookFolders/pathlib庫的使用.ipynb"
p = Path(path)
print(f"將文件的絕對路徑按照`/`進(jìn)行分割,返回一個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庫的使用.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庫的使用.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庫的使用.ipynb').is_file()}")  # True
print(f"目標(biāo)路徑是否為文件夾: {Path('/home/leovin/JupyterNotebookFolders/').is_dir()}")  # True

directory為文件夾

2.11 將相對路徑轉(zhuǎn)換為絕對路徑

—— Path("路徑").resolve()

from pathlib import Path
print(f"目標(biāo)路徑是否為文件: {Path('/home/leovin/JupyterNotebookFolders/pathlib庫的使用.ipynb').is_file()}")  # True
print(f"目標(biāo)路徑是否為文件夾: {Path('/home/leovin/JupyterNotebookFolders/').is_dir()}")  # True

2.12 遍歷一個目錄

—— 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>
# 迭代目錄對象
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語法.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庫的使用.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)
# 遍歷返回的對象 -> 返回的是絕對路徑
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語法.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庫的使用.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ā)生錯誤,原因?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)錯的輸出:
No.0: craw.data.txt
No.1: test.txt
------------------------------
刪除文件發(fā)生錯誤,原因?yàn)? [Errno 2] No such file or directory: 'will_be_deleted.txt'
No.0: craw.data.txt
No.1: test.txt
"""

3. pathlib庫與os庫的對比

ospathlib描述英文說明
os.path.abspath(("文件路徑"))Path("文件路徑").resolve()將路徑轉(zhuǎn)換為絕對路徑-
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)前路徑是否為絕對路徑-
os.path.basename()Path("文件路徑").name返回文件/目錄的基礎(chǔ)名稱(不帶路徑)-
os.path.dirname()Path("文件路徑").parent返回路徑所屬文件夾名稱-
os.path.samefile()Path("文件路徑").samefile(xxx)判斷兩個文件是否相同-
os.path.splitext("文件路徑")(Path("文件路徑").stem, Path("文件路徑").suffix)將文件名分離,分成前綴和后綴stem + suffix

參考

http://www.dbjr.com.cn/article/193402.htm

https://docs.python.org/zh-cn/3/library/pathlib.html?highlight=pathlib#module-pathlib

到此這篇關(guān)于Python中的pathlib庫的文章就介紹到這了,更多相關(guān)Python pathlib庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python?3.10上如何安裝pyqt5

    python?3.10上如何安裝pyqt5

    這篇文章主要介紹了python?3.9上安裝pyqt5的詳細(xì)步驟,本文分步驟給大家介紹如何在python?3.9?上安裝?pyqt5,需要的朋友可以參考下
    2022-07-07
  • 如何利用Python擬合函數(shù)曲線詳解

    如何利用Python擬合函數(shù)曲線詳解

    在實(shí)際項(xiàng)目中,往往有這樣的需求:對采集到的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理(曲線擬合),再計(jì)算出一些想要的參數(shù),比如峰值/dip值/周期等等,下面這篇文章主要給大家介紹了關(guān)于如何利用Python擬合函數(shù)曲線的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Python?OpenCV超詳細(xì)講解讀取圖像視頻和網(wǎng)絡(luò)攝像頭

    Python?OpenCV超詳細(xì)講解讀取圖像視頻和網(wǎng)絡(luò)攝像頭

    OpenCV用C++語言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實(shí)時(shí)視覺應(yīng)用,并在可用時(shí)利用MMX和SSE指令,本篇文章帶你了解OpenCV讀取圖像視頻與網(wǎng)絡(luò)攝像頭的方法
    2022-04-04
  • python對配置文件.ini進(jìn)行增刪改查操作的方法示例

    python對配置文件.ini進(jìn)行增刪改查操作的方法示例

    .ini配置文件常被用作存儲程序中的一些參數(shù),通過它程序可以變得更加靈活。下面這篇文章主要給大家介紹了關(guān)于python對配置文件.ini進(jìn)行增刪改查操作的方法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • python 通過 pybind11 使用Eigen加速代碼的步驟

    python 通過 pybind11 使用Eigen加速代碼的步驟

    這篇文章主要介紹了python 通過 pybind11 使用Eigen加速代碼的步驟,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python編程之順序執(zhí)行與程序的主入口詳解

    Python編程之順序執(zhí)行與程序的主入口詳解

    程序從程序入口進(jìn)入,到程序執(zhí)行結(jié)束,大體是按照順序結(jié)構(gòu)執(zhí)行語句、函數(shù)或代碼塊,掌握程序的結(jié)構(gòu),有利于把握程序的主體框架,下面這篇文章主要給大家介紹了關(guān)于Python編程之順序執(zhí)行與程序的主入口的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 在Django中管理Users和Permissions以及Groups的方法

    在Django中管理Users和Permissions以及Groups的方法

    這篇文章主要介紹了在Django中管理Users和Permissions以及Groups的方法,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • python 字典和列表嵌套用法詳解

    python 字典和列表嵌套用法詳解

    python中字典和列表的使用,在數(shù)據(jù)處理中應(yīng)該是最常用的,今天通過多種場景給大家分享python 字典和列表嵌套用法,感興趣的朋友一起看看吧
    2021-06-06
  • Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù)

    Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù)

    這篇文章主要介紹了Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作

    Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作

    這篇文章主要介紹了Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06

最新評論