網站首頁 編程語言 正文
一、pathlib庫官方定義
pathlib 是Python內置庫,Python 文檔給它的定義是 Object-oriented filesystem paths(面向對象的文件系統路徑)。pathlib 提供表示文件系統路徑的類,其語義適用于不同的操作系統。
路徑類在純路徑之間劃分,純路徑提供純粹的計算操作而沒有 I / O,以及具體路徑,它繼承純路徑但也提供 I / O 操作。
二、pathlib秘籍
1、 基本用法
- Path.iterdir() # 遍歷目錄的子目錄或者文件
- Path.is_dir() # 判斷是否是目錄
- Path.glob() # 過濾目錄(返回生成器)
- Path.resolve() # 返回絕對路徑
- Path.exists() # 判斷路徑是否存在
- Path.open() # 打開文件(支持with)
- Path.unlink() # 刪除文件或目錄(目錄非空觸發異常)?
2、 基本屬性
- Path.parts?# 分割路徑 類似os.path.split(), 不過返回元組
- Path.drive?# 返回驅動器名稱
- Path.root?# 返回路徑的根目錄
- Path.anchor?# 自動判斷返回drive或root
- Path.parents?# 返回所有上級目錄的列表
3、 改變路徑
- Path.with_name() # 更改路徑名稱, 更改最后一級路徑名
- Path.with_suffix() # 更改路徑后綴
4、 拼接路徑
- Path.joinpath() # 拼接路徑
- Path.relative_to() # 計算相對路徑
5、 測試路徑
- Path.match() # 測試路徑是否符合pattern
- Path.is_dir() # 是否是文件
- Path.is_absolute() # 是否是絕對路徑
- Path.is_reserved() # 是否是預留路徑
- Path.exists() # 判斷路徑是否真實存在
6、 其他方法
- Path.cwd() # 返回當前目錄的路徑對象
- Path.home() # 返回當前用戶的home路徑對象
- Path.stat() # 返回路徑信息, 同os.stat()
- Path.chmod() # 更改路徑權限, 類似os.chmod()
- Path.expanduser() # 展開~返回完整路徑對象
- Path.mkdir() # 創建目錄
- Path.rename() # 重命名路徑
- Path.rglob() # 遞歸遍歷所有子目錄的文件
三、os和pathlib.Path的區別
相對于 os 模塊的 path 方法,Python3 標準庫 pathlib 模塊的 Path 對路徑的操作會更簡單。
1、 獲取當前文件路徑
使用 os 模塊時,通過?getcwd()
?方法可以直接獲取當前文件路徑
在 Pycharm 中,可以使用?os.path.dirname(__file__)
?獲取當前文件路徑,因為 Python 并沒有提供 __file__ 這個概念,他是 Pycharm 提供的:
import os print(os.getcwd()) # C:\Users\bobin.yang\PycharmProjects\untitled print(os.path.dirname(__file__)) # C:/Users/bobin.yang/PycharmProjects/untitled
在 pathlib 模塊中,通過?Path.cwd()
?方法可以直接獲取當前文件路徑,我們可以動手試一試:
import pathlib print(pathlib.Path.cwd()) # C:\Users\bobin.yang\PycharmProjects\untitled
通過 Pycharm 我們可以使用快捷鍵?ctrl+鼠標左鍵
?點擊查看該方法的詳細介紹。
從上圖中可以看出?cwd()
?方法不過是對 os 庫中?getcwd()
?方法進行了封裝,看起來好像更差勁了,但是官方的推出一定不是子虛烏有的,現在讓我們一起來揭秘。
2、 獲取上層/上層目錄
上面那個案例仿佛讓 pashlib 庫的使用變得更加復雜了,為了揭秘,我們只能一同感受下 pathlib 庫的構成,了解 pathlib 庫如何帶給我們便捷。
在 os 模塊中,如果我們要獲取某一個文件的父目錄,os 模塊的寫法為:
import os print(os.path.dirname(os.path.dirname(os.getcwd()))) # C:\PycharmProjects
在 pathlib 庫中,可以通過這樣簡潔方法實現:
import pathlib print(pathlib.Path.cwd().parent) # C:\PycharmProjects
并且,如果你需要找他爺爺,是不是再來一個?.parent
?就行了。相比較 os 模塊的?os.path.dirname()
?是不是方便太多太多了?
3、 路徑拼接
如果你要在他父目錄中拼接路徑,通過 os 模塊你可能需要寫這么一長串代碼:
import os print(os.path.join(os.path.dirname(os.getcwd()), '路徑拼接', '真麻煩')) # C:\PycharmProjects\路徑拼接\真麻煩
當你使用 pathlib 的時候,我們一起來感受他的便捷之處吧!
# /Users/mac/test.py import os paths = ('路徑拼接', '真麻煩') print(pathlib.Path.cwd().parent.joinpath(*paths)) # C:\PycharmProjects\路徑拼接\真麻煩
通過 pathlib 庫拼接路徑,你可以很方便的調節他在他祖輩的位置,妙哉。
4、 其他封裝
pathlib 封裝了很多的 os.path 中的方法,如下所示:
- os.path.expanduser()?-->?pathlib.Path.home()
- os.path.expanduser()?-->?pathlib.Path.expanduser()
- os.stat()?-->?pathlib.Path.stat()
- os.chmod()?--> pathlib.Path.chmod()
四、pathlib.PurePath的使用
上一節的操作大部分都是通過 pathlib 庫中的 Path 實現,其實他還有一個更加高大上的模塊,也就是我們這一節的主角:pathlib.PurePath
。
PurePath 是一個純路徑對象,純路徑對象提供了實際上不訪問文件系統的路徑處理操作。
有三種方法可以訪問這些類,我們也稱之為 flavor 。
1、 PurePath.match
下面讓我們來實現一個神奇的功能,判斷當前的路徑下是否有符合'*.py'規則的文件。
import pathlib print(pathlib.PurePath(__file__).match('*.py')) # True
輸出為什么會是?True
?呢?因為當前文件夾下不就有一個?test.py
?嗎?
2、 PurePath的子類:PurePosixPath(非Windows系統)、PureWindowsPath
看見 pathlib.PurePath 后面跟著 match,那是不是能說明他是個對象,而不是一個單純的路徑字符串,因此我們可以試著打印 pathlib.PurePath 看一看。
import pathlib os_path = os.path.dirname(__file__) print(os_path) # C:/PycharmProjects/untitled pure_path = pathlib.PurePath(__file__) print(pure_path) # C:\PycharmProjects\untitled\run.py print(type(pure_path)) # <class 'pathlib.PureWindowsPath'> print(pathlib.PurePath(__file__).match('*.py')) # True
通過打印 os.path 獲取當前路徑的結果,得到一個路徑字符串;而通過 pathlib.PurePath 則獲得了一個 PurePosixPath 對象,并且由此得到的路徑包括了當前文件 run.py。
原文鏈接:https://www.cnblogs.com/springsnow/p/13180190.html
相關推薦
- 2022-11-16 一文搞懂C++中的運算符重載_C 語言
- 2023-01-30 uniapp語音識別(訊飛語音)轉文字_其它相關
- 2022-12-24 詳解Python裝飾器的四種定義形式_python
- 2023-03-02 C++回溯算法之深度優先搜索詳細介紹_C 語言
- 2022-03-24 樹莓派搭建nas服務器的詳細過程_Linux
- 2022-03-28 Python獲取網絡時間戳的兩種方法詳解_python
- 2022-05-09 Python數據結構與算法的雙端隊列詳解_python
- 2022-08-17 C++詳解鏈棧的實現_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支