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

python3利用pathlib替代os.path的方法實(shí)例

 更新時間:2022年04月17日 10:05:12   作者:yoyoketang  
os.path 模塊始終是適合Python運(yùn)行的操作系統(tǒng)的路徑模塊,因此可用于本地路徑,下面這篇文章主要給大家介紹了關(guān)于python3利用pathlib替代os.path的相關(guān)資料,需要的朋友可以參考下

前言

如果你還在為操作文件路徑煩惱,不會使用os.path模塊,那么是時候試試pathlib了。

pathlib 庫

pathlib 庫從 python3.4 開始,到 python3.6 已經(jīng)比較成熟。如果你的新項(xiàng)目可以直接用 3.6 以上,建議用 pathlib。相比于老式的 os.path 有幾個優(yōu)勢:

  • 老的路徑操作函數(shù)管理比較混亂,有的是導(dǎo)入 os, 有的又是在 os.path 當(dāng)中,而新的用法統(tǒng)一可以用 pathlib 管理。
  • 老用法在處理不同操作系統(tǒng) win,mac 以及 linux 之間很吃力。換了操作系統(tǒng)常常要改代碼,還經(jīng)常需要進(jìn)行一些額外操作。
  • 老用法主要是函數(shù)形式,返回的數(shù)據(jù)類型通常是字符串。但是路徑和字符串并不等價,所以在使用 os 操作路徑的時候常常還要引入其他類庫協(xié)助操作。新用法是面向?qū)ο?,處理起來更靈活方便。
  • pathlib 簡化了很多操作,用起來更輕松。

常用的 pathlib 和 os 對比圖

操作os and os.pathpathlib
絕對路徑os.path.abspathPath.resolve
修改權(quán)限os.chmodPath.chmod
創(chuàng)建目錄os.mkdirPath.mkdir
重命名os.renamePath.rename
移動os.replacePath.replace
刪除目錄os.rmdirPath.rmdir
刪除文件os.remove, os.unlinkPath.unlink
工作目錄os.getcwdPath.cwd
是否存在os.path.existsPath.exists
用戶目錄os.path.expanduserPath.expanduser and Path.home
是否為目錄os.path.isdirPath.is_dir
是否為文件os.path.isfilePath.is_file
是否為連接os.path.islinkPath.is_symlink
文件屬性os.statPath.stat, Path.owner, Path.group
是否為絕對路徑os.path.isabsPurePath.is_absolute
路徑拼接os.path.joinPurePath.joinpath
文件名os.path.basenamePurePath.name
上級目錄os.path.dirnamePurePath.parent
同名文件os.path.samefilePath.samefile
后綴os.path.splitextPurePath.suffix

pathlib 獲取文件路徑

Path.cwd 獲取當(dāng)前文件夾路徑

需注意的是,返回的不是字符串,而是 WindowsPath 對象

from pathlib import Path

# 1.可以直接調(diào)用類方法.cwd()
print(Path.cwd())  # C:\Users\dell\PycharmProjects\untitled3\demo

# 2.也可以實(shí)例化后調(diào)用
p = Path('./')
print(p.cwd()) # C:\Users\dell\PycharmProjects\untitled3\demo
print(type(p.cwd()))  # <class 'pathlib.WindowsPath'>

獲取當(dāng)前文件路徑

from pathlib import Path

# 當(dāng)前文件路徑
p = Path(__file__)
print(p)

獲取 Path 對象絕對路徑

from pathlib import Path

# 當(dāng)前文件路徑
p = Path('data.json')
print(p)  # data.json 對象
print(p.absolute())  # C:\Users\dell\PycharmProjects\untitled3\demo\data.json

一些常用的獲取文件屬性

from pathlib import Path

# 當(dāng)前文件路徑
p = Path(__file__)
print(p.absolute())   # 獲取絕對路徑
print(p.resolve())    # 獲取絕對路徑
print(p.name)   # 獲取文件名稱 'a1117.py'
print(p.stem)    # 只要文件名,不要后綴 a1117
print(p.suffix)  # 獲取文件 后綴.py
print(p.suffixes)  # 文件所有的猴子 ['.py']
print(p.parts)  # 拆分('C:\\', 'Users', 'dell', 'PycharmProjects', 'untitled3', 'demo', 'a1117.py')
print(p.parent)  # C:\Users\dell\PycharmProjects\untitled3\demo
print(p.parent.parent)  # C:\Users\dell\PycharmProjects\untitled3
print(p.parents)  # 所有的父級 <WindowsPath.parents>
print(p.anchor)  # 錨,目錄前面的部分 C:\ 或者 /

獲取上層,上上層目錄

from pathlib import Path

# .parent 獲取上一層
print(Path.cwd().parent)

# 實(shí)例化后調(diào)用 .parent
p = Path('./')
print(p.cwd().parent)

獲取上上層使用鏈?zhǔn)椒椒ㄕ{(diào)用 .parent.parent

from pathlib import Path

# .parent 獲取上一層
print(Path.cwd().parent.parent)

# 實(shí)例化后調(diào)用 .parent
p = Path('./')
print(p.cwd().parent.parent)

獲取用戶home目錄

from pathlib import Path
print(Path.home())  # c:\Users\dell

判斷文件,文件夾

is_file()判斷是不是文件

from pathlib import Path

# 1.  is_file() 判斷是不是文件
print(Path.cwd().is_file())  # False

# 2.也可以實(shí)例化后調(diào)用
p = Path('./data.json')
print(p.is_file())  # True

is_dir() 判斷是否是文件夾

from pathlib import Path

# 1.  is_file() 判斷是不是文件
print(Path.cwd().is_dir())  # True

# 2.也可以實(shí)例化后調(diào)用
p = Path('./data.json')
print(p.is_dir())  # False

exists() 判斷文件 或文件夾是否存在

from pathlib import Path

# exists() 判斷是否存在
p = Path('./data.json')
print(p.exists())  # True or False

is_absolute() 判斷是否是絕對路徑

from pathlib import Path

# 當(dāng)前文件路徑
p = Path(__file__)
print(p)
print(p.is_absolute())  # True

joinpath 拼接目錄

可以用類似 os.path.join 的方法

from pathlib import Path

# 當(dāng)前文件路徑
p = Path('./')
print(p.absolute())  # C:\Users\dell\PycharmProjects\untitled3\demo
print(p.joinpath('data.json'))  # data.json
print(p.joinpath('data.json').absolute())   # C:\Users\dell\PycharmProjects\untitled3\demo\data.json
# 拼接多層
print(p.joinpath('files', 'data.json'))   # files\data.json
print(p.joinpath('files', 'data.json').absolute())  # C:\Users\dell\PycharmProjects\untitled3\demo\files\data.json

pathlib 支持用 / 拼接路徑, 這種語法估計(jì)用的人很少

from pathlib import Path

# 當(dāng)前文件路徑
p = Path('./')
# / 拼接
new_path = p / 'files' / 'data.json'
print(new_path.absolute())

iterdir()遍歷文件目錄

比如在當(dāng)前腳本的 files 目錄有以下文件夾和子文件

.iterdir() 遍歷某個目錄下的所有路徑(文件和子目錄)

from pathlib import Path

# 當(dāng)前文件路徑
p = Path('files')
for i in p.iterdir():
    print(i.absolute())

"""運(yùn)行結(jié)果:
C:\Users\dell\PycharmProjects\untitled3\demo\files\json
C:\Users\dell\PycharmProjects\untitled3\demo\files\username.txt
C:\Users\dell\PycharmProjects\untitled3\demo\files\yaml
"""

如果只需獲取文件夾,可以加個判斷.is_dir()

from pathlib import Path

# 當(dāng)前文件路徑
p = Path('files')
print([i for i in p.iterdir() if i.is_dir()])  # [WindowsPath('files/json'), WindowsPath('files/yaml')]

也可以用.is_file獲取文件對象

from pathlib import Path

# 當(dāng)前文件路徑
p = Path('files')
print([i for i in p.iterdir() if i.is_file()])  # [WindowsPath('files/username.txt')]

glob() 和 rglob() 模式匹配(正則表達(dá)式)

使用模式匹配(正則表達(dá)式)匹配指定的路徑。glob 只會匹配當(dāng)前目錄下, rglob 會遞歸所有子目錄 比如在當(dāng)前腳本的 files 目錄有以下文件夾和子文件

glob 只會匹配當(dāng)前目錄下

from pathlib import Path

p = Path('files')
# glob 只會遍歷查找當(dāng)前目錄
print(p.glob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.glob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.glob('*.yml')])  # []

rglob 會遞歸所有子目錄

from pathlib import Path

p = Path('files')
# glob 只會遍歷查找當(dāng)前目錄
print(p.rglob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.rglob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.rglob('*.yml')])  # [WindowsPath('files/yaml/aa.yml'), WindowsPath('files/yaml/bb.yml')]

match() 檢查路徑是否符合規(guī)則

from pathlib import Path

p = Path('data.json')
# math 檢查匹配規(guī)則
print(p.match('*.json'))  # True

創(chuàng)建文件操作

touch() 創(chuàng)建文件

from pathlib import Path

p = Path('xx.json')
p.touch()   # 創(chuàng)建一個xx.json

當(dāng)文件已經(jīng)存在的時候,p.touch() 也不會報(bào)錯,因?yàn)槟J(rèn)參數(shù) exist_ok=True 如果設(shè)置 exist_ok=False, 文件已經(jīng)存在,touch就會報(bào)錯了

from pathlib import Path

p = Path('xx.json')
p.touch(exist_ok=False)   # 創(chuàng)建一個xx.json

拋出異常FileExistsError: [Errno 17] File exists: 'xx.json'

mkdir() 創(chuàng)建目錄

在當(dāng)前腳本下創(chuàng)建一個yoyo目錄

from pathlib import Path

p = Path('yoyo')
# mkdir 創(chuàng)建yoyo目錄
p.mkdir()

如果想一次性創(chuàng)建多層目錄 'yoyo/json'

from pathlib import Path

p = Path('yoyo/json')
# mkdir 創(chuàng)建yoyo/json目錄
p.mkdir()

此時會拋出異常FileNotFoundError: [WinError 3] 系統(tǒng)找不到指定的路徑。: 'yoyo\json'

遞歸創(chuàng)建目錄mkdir(parents=True)

from pathlib import Path

p = Path('yoyo/json')
# mkdir 創(chuàng)建yoyo/json目錄
p.mkdir(parents=True)

刪除文件操作

刪除目錄非常危險(xiǎn),并且沒有提示,一定要謹(jǐn)慎操作

rmdir() 一次只刪除一級目錄,且當(dāng)前目錄必須為空。

from pathlib import Path

p = Path('yoyo/json')
# mkdir 創(chuàng)建yoyo/json目錄
p.rmdir()

unlink() 刪除文件

from pathlib import Path

p = Path('files/username.txt')
p.unlink()

文件讀寫操作

pathlib 對讀取和寫入進(jìn)行了簡單的封裝,不再需要重復(fù)去打開文件和管理文件的關(guān)閉了。

  • .read_text() 讀取文本
  • .read_bytes() 讀取 bytes
  • .write_text() 寫入文本
  • .write_bytes() 寫入 tytes
from pathlib import Path

p = Path('yo.txt')
p.write_text("hello world")
print(p.read_text())  # hello world

file.write 操作使用的是 w 模式,如果之前已經(jīng)有文件內(nèi)容,將會被覆蓋。

修改文件

replace() 移動文件

from pathlib import Path

p = Path('yo.txt')
p.write_text("hello world")
print(p.read_text())  # hello world

p.replace('xx.json')

with_name() 重命名文件

from pathlib import Path

p = Path('hello.txt')
p.write_text("hello world")
print(p.read_text())  # hello world

# 重命名為一個新的文件對象
new_file = p.with_name('x.txt')
print(new_file)
p.replace(new_file)  # 移動到新的位置

總結(jié)

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

相關(guān)文章

  • Flask如何獲取用戶的ip,查詢用戶的登錄次數(shù),并且封ip

    Flask如何獲取用戶的ip,查詢用戶的登錄次數(shù),并且封ip

    這篇文章主要介紹了Flask如何獲取用戶的ip,查詢用戶的登錄次數(shù),并且封ip問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 使用python實(shí)現(xiàn)CGI環(huán)境搭建過程解析

    使用python實(shí)現(xiàn)CGI環(huán)境搭建過程解析

    這篇文章主要介紹了使用python實(shí)現(xiàn)CGI環(huán)境搭建過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • python實(shí)現(xiàn)批量移動文件

    python實(shí)現(xiàn)批量移動文件

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量移動文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • python調(diào)用百度語音REST API

    python調(diào)用百度語音REST API

    這篇文章主要為大家詳細(xì)介紹了python調(diào)用百度語音REST API,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python 控制臺單行刷新,多行刷新實(shí)例

    python 控制臺單行刷新,多行刷新實(shí)例

    今天小編就為大家分享一篇python 控制臺單行刷新,多行刷新實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • opencv python Canny邊緣提取實(shí)現(xiàn)過程解析

    opencv python Canny邊緣提取實(shí)現(xiàn)過程解析

    這篇文章主要介紹了opencv python Canny邊緣提取實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 關(guān)于pycharm?python3.7成功安裝dlib庫的問題

    關(guān)于pycharm?python3.7成功安裝dlib庫的問題

    這篇文章主要介紹了pycharm?python3.7成功安裝dlib庫的解決方法,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • python文件和目錄操作函數(shù)小結(jié)

    python文件和目錄操作函數(shù)小結(jié)

    這篇文章主要介紹了python文件和目錄操作函數(shù)小結(jié),主要涉及到os模塊和shutil模塊的一些方法,需要的朋友可以參考下
    2014-07-07
  • Python使用ctypes調(diào)用C/C++的方法

    Python使用ctypes調(diào)用C/C++的方法

    今天小編就為大家分享一篇關(guān)于Python使用ctypes調(diào)用C/C++的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Pycharm導(dǎo)入anaconda環(huán)境的教程圖解

    Pycharm導(dǎo)入anaconda環(huán)境的教程圖解

    這篇文章主要介紹了Pycharm導(dǎo)入anaconda環(huán)境的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論