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

詳解Python中os.path與pathlib的用法和性能對比

 更新時間:2024年03月10日 15:35:25   作者:wang_yb  
pathlib 模塊是在Python3.4版本中首次被引入到標(biāo)準(zhǔn)庫中的,這篇文章主要來和大家介紹一下Python中os.path與pathlib再用法和性能上的區(qū)別,感興趣的可以了解下

pathlib 模塊是在Python3.4版本中首次被引入到標(biāo)準(zhǔn)庫中的,作為一個可選模塊。

Python3.6開始,內(nèi)置的 open 函數(shù)以及 os 、 shutil 和 os.path 模塊中的各種函數(shù)都可以正確地使用 pathlib.Path 對象了。

最初,pathlib給人的感覺只是os.path的一個不必要的面向?qū)ο蟀姹荆?/p>

不過,當(dāng)你實際去了解pathlib之后,會發(fā)現(xiàn)pathlib實際上絕不是一個簡單的面向?qū)ο蟀姹荆?/p>

而是實實在在的解決了os.path存在的一些問題。

1. os.path VS pathlib

1.1. 路徑規(guī)范化

對于os.path來說,路徑的分隔用正斜桿\)還是反斜杠/)需要自己根據(jù)操作系統(tǒng)來確定。

或者,每一個路徑拼接的地方,都用os.path.join來連接。

而使用pathlib的話,直接用反斜杠/)即可,不用擔(dān)心操作系統(tǒng)的不同。

比如:

import os

# windows系統(tǒng)中測試

os.path.join("a/b", "c.txt")
# 運行結(jié)果 錯誤
# 'a/b\\c.txt'

os.path.join("a", "b", "c.txt")
# 運行結(jié)果 正確
# 'a\\b\\c.txt'

從代碼可以看出,每一層文件夾都必須用join連接才能正確適應(yīng)不同系統(tǒng)。

而在pathlib中,則不需要考慮這么多。

from pathlib import Path

Path("a/b").joinpath("c.txt")
# WindowsPath('a/b/c.txt')

Path("a").joinpath("b").joinpath("c.txt")
# WindowsPath('a/b/c.txt')

使用pathlib,在windows或者linux中,統(tǒng)一使用反斜杠/)來分隔文件夾。

路徑規(guī)范化之后的好處就是代碼更加簡潔。

比如:下面這個重命名文件的例子(a/b/c/d.csv => a/b/c.csv

# os.path 方式
os.rename(os.path.join("a", "b", "c", "d.csv"), os.path.join("a", "b", "c.csv"))

# pathlib 方式
Path("a/b/c/d.csv").reanme("a/b/c.csv")

哪種方式更清晰簡潔不言而喻。

1.2. 字符串和對象

為什么要用對象來表示路徑?

先看下面3個字符串變量:

student = '{"name": "databook", "score": "90"}'
graduate_date = "2023-07-01"
home_directory = '/home/databook'

這3個字符串其實代表不同的事物:一種是 JSON blob,一種是日期,一種是文件路徑。

再看下面3個用對象表示的變量:

from datetime import date
from pathlib import Path

student = {"name": "databook", "score": "90"}
graduate_date = date(2023, 7, 1)
home_directory = Path('/home/databook')

用字符串來表示變量確實簡潔,但也導(dǎo)致每個變量失去了其本身的意義,

程序無法區(qū)分這個變量代表的是JSON,還是日期,還是一個路徑,從而增加了程序的不確定性。

程序規(guī)模大了,或者復(fù)雜性提高了之后,存在很大的隱患。

os.pathpathlib就是這樣的關(guān)系,os.path使用字符串表示路徑,pathlib使用Path對象表示路徑。

1.3. 讀寫文件

pathlib的路徑對象(Path)可以直接讀寫文件,因此也能大大簡化讀寫文件的代碼。

不用pathlib的讀寫文件方式:

import os

# 讀取文件
fp = os.path.join("a", "b.txt")
with open(fp, "r") as f:
    f.read()

# 寫入文件
with open(fp, "w") as f:
    f.write("hello")

使用pathlib的話:

from pathlib import Path

# 讀取文件
Path("a/b.txt").read_text()

# 寫入文件
Path("a/b.txt").write_text("hello)

2. pathlib的性能

pathlib用面向?qū)ο蟮姆绞教幚砺窂?,難免讓人覺得會比傳統(tǒng)的方式慢很多,也就是存在性能問題。

那么,pathlib到底會比傳統(tǒng)方式慢多少?通過下面的簡單示例來看看。

傳統(tǒng)方式:

def a(d="D:/miniconda3/Lib/site-packages"):
    from os import getcwd, walk

    extension = ".py"
    count = 0
    for root, directories, filenames in walk(d):
        for filename in filenames:
            if filename.endswith(extension):
                count += 1
                
    print(f"{count} Python files found")

if __name__ == "__main__":
    import time

    t0 = time.time()
    a()
    t1 = time.time()
    print(t1 - t0)

# 運行結(jié)果:
7875 Python files found
0.31201744079589844

pathlib方式:

def b(d="D:/miniconda3/Lib/site-packages"):
    from pathlib import Path

    extension = ".py"
    count = 0
    for filename in Path(d).rglob(f"*{extension}"):
        count += 1

    print(f"{count} Python files found")

if __name__ == "__main__":
    import time

    t0 = time.time()
    b()
    t1 = time.time()
    print(t1 - t0)

# 運行結(jié)果:
7875 Python files found
0.44898128509521484

讀取的標(biāo)準(zhǔn)庫中的文件,總共將近8000個文件,運行多次后,時間大概相差0.1秒左右。

pathlib的性能確實略遜于傳統(tǒng)方式,但是將近8000個文件,也只慢了0.1秒

如果不是大規(guī)模處理文件的話,還是用pathlib更好。

3. 總結(jié)

總的來說,與傳統(tǒng)的 os.path 模塊相比,pathlib 提供了一種更現(xiàn)代和面向?qū)ο蟮姆绞絹硖幚砦募窂健?br />它支持跨平臺的文件路徑操作,使得開發(fā)者可以更容易地編寫可移植的代碼。
此外,pathlib 還提供了鏈?zhǔn)秸{(diào)用的能力,使得代碼更加簡潔和易讀。

因此,為了代碼更加簡潔、易讀和可維護,推薦使用 pathlib 來替代傳統(tǒng)的 os.path。

到此這篇關(guān)于詳解Python中os.path與pathlib的用法和性能對比的文章就介紹到這了,更多相關(guān)Python os.path pathlib內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用sort和class實現(xiàn)的多級排序功能示例

    Python使用sort和class實現(xiàn)的多級排序功能示例

    這篇文章主要介紹了Python使用sort和class實現(xiàn)的多級排序功能,涉及Python基于面向?qū)ο蟮脑乇闅v、列表排序、添加等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • python+os根據(jù)文件名自動生成文本

    python+os根據(jù)文件名自動生成文本

    這篇文章主要為大家詳細介紹了python+os根據(jù)文件名自動生成文本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Python實現(xiàn)標(biāo)記數(shù)組的連通域

    Python實現(xiàn)標(biāo)記數(shù)組的連通域

    這篇文章主要為大家詳細介紹了如何通過Python實現(xiàn)標(biāo)記數(shù)組的連通域,文中的示例代碼講解詳細,對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2023-04-04
  • python函數(shù)默認(rèn)參數(shù)使用避坑指南

    python函數(shù)默認(rèn)參數(shù)使用避坑指南

    這篇文章主要為大家介紹了python函數(shù)默認(rèn)參數(shù)使用的踩雷避坑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Python獲取統(tǒng)計自己的qq群成員信息的方法

    Python獲取統(tǒng)計自己的qq群成員信息的方法

    這篇文章主要介紹了Python獲取統(tǒng)計自己的qq群成員信息的方法,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Python運算符教程之邏輯門詳解

    Python運算符教程之邏輯門詳解

    邏輯門是任何數(shù)字電路的基本構(gòu)建塊。它需要一兩個輸入并根據(jù)這些輸入產(chǎn)生輸出。本文將通過示例和大家講講Python中的7個基本邏輯門,感興趣的可以了解一下
    2022-09-09
  • Python編程把二叉樹打印成多行代碼

    Python編程把二叉樹打印成多行代碼

    這篇文章主要介紹了Python編程把二叉樹打印成多行代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 詳解python如何正確使用時間戳,日期,時間,時區(qū)

    詳解python如何正確使用時間戳,日期,時間,時區(qū)

    這篇文章主要為大家介紹了如何在python中正確使用時間戳,日期,時間,時區(qū),文中通過簡單的示例進行了詳細介紹,希望對大家有一定的幫助
    2024-11-11
  • Python中的作用域==和is的區(qū)別及說明

    Python中的作用域==和is的區(qū)別及說明

    這篇文章主要介紹了Python中的作用域==和is的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • ?python用matplotlib可視化繪圖詳解

    ?python用matplotlib可視化繪圖詳解

    這篇文章主要介紹了?python用matplotlib可視化繪圖詳解,Matplotlib?是一個python的?2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環(huán)境生成出版質(zhì)量級別的圖形,下面我們就來看看關(guān)于matplotlib可視化繪圖的詳細過程吧
    2022-01-01

最新評論