0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Boltons:超過230個的純Python實用工具庫

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-17 10:56 ? 次閱讀

經(jīng)過了幾十年的發(fā)展,Python 的輪子生態(tài)越來越豐富,例如針對網(wǎng)絡(luò)請求有 requests,針對命令行開發(fā)有 typer 等等,這些第三方庫給我們的日常開發(fā)帶來了極大的便利。

今天給兄弟們推薦另一個第三方庫 -- Boltons,和大多數(shù)第三方庫不太一樣,它并不是針對某一功能的工具庫,而是將開發(fā)中那些重復性(經(jīng)常使用)及復雜度較高(不容易編寫)較高的代碼剝離出來,并按照操作對象分門別類整合在一起的工具庫。

Boltons 使用的是 BSD 許可證,到目前為止已經(jīng)收錄 超過230個 的純 Python實用工具庫,這些工具庫與 Python 標準庫并沒有重合,是補充的關(guān)系,包括:

  • cacheutils 工具集:用于管理緩存,提供 LRU 和 LRI 等緩存方式
  • debugutils 工具庫:用于調(diào)試實用程序
  • dictutils 工具庫:映射類型(OMD)
  • ecoutils 工具庫:生態(tài)系統(tǒng)分析
  • fileutils工具庫:文件系統(tǒng)幫助器,提供原子文件保存等功能
  • formatutils 工具庫:str.format() 工具箱
  • funcutils 工具庫:functools 修正
  • gcutils 工具庫:垃圾收集工具
  • ioutils 工具庫:增強輸入/輸出功能
  • iterutils 工具庫:itertools 改進
  • jsonutils 工具庫:JSON交互
  • listutils 工具庫:list 衍生物
  • mathutils 工具庫:提供數(shù)學函數(shù)的支持
  • mboxutils 工具庫:Unix郵箱實用程序
  • namedutils 工具庫:提供兩種輕量級容器類型
  • pathutils 工具庫:提供處理文件路徑的函數(shù)
  • queueutils 工具庫:優(yōu)先級隊列,目前提供基于堆及基于排序列表兩種隊列實現(xiàn)
  • setutils 工具庫:IndexedSet 類型
  • socketutils 工具庫:socket 包裝紙
  • statsutils 工具庫:統(tǒng)計基本面
  • strutils 工具庫:文本操作,涉及到方方面面,有非常多的工具函數(shù)
  • tableutils 工具庫:2D數(shù)據(jù)結(jié)構(gòu)
  • tbutils 工具庫:回溯跟蹤和調(diào)用堆棧,豐富的Tracebackinfo類實現(xiàn)了棧追蹤
  • timeutils 工具庫:增加 datetime 對象處理能力
  • typeutils 工具庫:類型處理
  • urlutils 工具庫:結(jié)構(gòu)化URL,方便對 URL 進行處理

# 1. 如何安裝

安裝只需要一條命令

pip install boltons

# 2. 實用范例

Boltons 的工具庫函數(shù)非常多,不能一一舉例,本文只摘取一些明哥認為經(jīng)典的工具做為演示

遍歷日期

在 timeutils 工具庫中有一個 daterange 可以對日期進行遍歷,省去自己手動構(gòu)造日期

>> > from datetime import date
 >> > from boltons.timeutils import daterange
 >> >
 >> > christmas = date(year=2022, month=12, day=25)
 >> > new_year = date(year=2023, month=1,  day=1)
 >> > for day in daterange(christmas, new_year):
...     print(repr(day))
...
datetime.date(2022, 12, 25)
datetime.date(2022, 12, 26)
datetime.date(2022, 12, 27)
datetime.date(2022, 12, 28)
datetime.date(2022, 12, 29)
datetime.date(2022, 12, 30)
datetime.date(2022, 12, 31)

當然,你也可以指定遍歷的間隔

>> > for day in daterange(date(2017, 5, 1), date(2017, 8, 1),
...                      step=(0, 1, 0), inclusive=True):
...     print(repr(day))
...
datetime.date(2017, 5, 1)
datetime.date(2017, 6, 1)
datetime.date(2017, 7, 1)
datetime.date(2017, 8, 1)

其中參數(shù)的意義是:

  • step (int):元組 (year, month, day) 。
  • inclusive (bool) :是否包含 stop 的日期

范圍轉(zhuǎn)具體

在 libvirt 里的 xml 上的 CPU 上通常都是這樣表示的

圖片

如何將這種格式(emulatorpin 里的 cpuset)的范圍,直接轉(zhuǎn)成具體包含了哪些核呢?

使用 boltons 的 strutils 工具包的一個函數(shù)立馬搞定

>> > from boltons.strutils import parse_int_list
 >> >
 >> > parse_int_list('0,7,21-22,48,55,69-70')
[0, 7, 21, 22, 48, 55, 69, 70]

遞歸映射

iterutils 工具包里提供一個 remap 函數(shù),可用于遍歷和轉(zhuǎn)換嵌套結(jié)構(gòu)。

如下面這個例子,將刪除所有 value = None 的元素

>> > from pprint import pprint
 >> >
 >> > reviews = {'Star Trek': {'TNG': 10, 'DS9': 8.5, 'ENT': None},
...            'Babylon 5': 6, 'Dr. Who': None}
 >> >
 >> >
 >> > from boltons.iterutils import remap
 >> >
 >> > pprint(remap(reviews, lambda p, k, v: v is not None))
{'Babylon 5': 6, 'Star Trek': {'DS9': 8.5, 'TNG': 10}}

與 remap 相似的函數(shù)還有一個 research,可用于遞歸匹配查找

假設(shè)有如下一個字典

root = {'a': {'b': 1, 'c': (2, 'd', 3)}, 'e': None}

此時我想找出所有 value 為整數(shù)的的項,可以這樣子實現(xiàn)

>> > from boltons.iterutils import research
> >>
 >> > res = research(root, query=lambda p, k, v: isinstance(v, int))
 >> > print(sorted(res))
[(('a', 'b'), 1), (('a', 'c', 0), 2), (('a', 'c', 2), 3)]

流式讀取多文件

如果你有多個文件需要連接起來處理,可以使用 ioutils 工具包里的 MultiFileReader

>> > from boltons.ioutils import MultiFileReader, BytesIO
 >> >
 >> > mfr = MultiFileReader(BytesIO(b'ab'), BytesIO(b'cd'), BytesIO(b'e'))
 >> > mfr.read(3).decode('ascii')
'abc'

創(chuàng)建多級目錄

Linux 上可以使用 mkdir -p 命令來創(chuàng)建多級目錄,但若使用 Python 來實現(xiàn)這個功能其實是非常麻煩的,如果不斷的判斷,一級一級往下去創(chuàng)建

而在 boltons 上的 fileutils 工具包提供的 mkdir_p 函數(shù),可以達到 Linux 上 mkdir -p 絲滑體驗

>> > from boltons.fileutils import mkdir_p
 >> >
 >> > mkdir_p("/home/foo/bar/test")

URL結(jié)構(gòu)處理

一個 URL 由下面結(jié)構(gòu)組成

foo://user:pass@example.com:8042/over/there?name=ferret#nose
 _/   _______/ _________/ __/_________/ _________/ __/
  |        |          |        |      |           |        |
scheme  userinfo     host     port   path       query   fragment

當我想從 URL 中解析獲取部分內(nèi)容時,就要對該字符串進行正則匹配。

若使用 boltons 中的 urlutils 工具庫 中的 URL 類,可以很方便對獲取任何 url 構(gòu)成

>> > from boltons.urlutils import URL
 >> >
 >> > url = URL('foo://example.com:8042/over/there?name=ferret#nose')
 >> > print(url.host)
example.com
 >> >
 >> > print(url.port)
8042
 >> >
 >> > print(url.path)
/over/there
 >> >
 >> > print(url.query_params)
QueryParamDict([('name', 'ferret')])

# 3. 寫在最后

Boltons 是純Python,如果你不想引入 Boltons 巨大的工具箱時,也不用擔心,每個模塊都是獨立的,沒有依賴關(guān)系,可以直接復制到項目中使用。Boltons 旨在為廣泛的基本功能提供最好的支持,是對標準庫的一個補充,并且將高級功能留給其他更加專業(yè)的第三方庫。推薦給大家使用!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 緩存
    +關(guān)注

    關(guān)注

    1

    文章

    229

    瀏覽量

    26635
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4722

    瀏覽量

    68236
  • 工具
    +關(guān)注

    關(guān)注

    4

    文章

    307

    瀏覽量

    27709
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4767

    瀏覽量

    84376
收藏 人收藏

    評論

    相關(guān)推薦

    matlab的實用工具命令

    matlab的實用工具命令實用工具 Abcdchk  檢測(A、B、C、D)組的一致性 Chop 取n重要的位置 Dexresp 離散取樣響應(yīng)函數(shù) 
    發(fā)表于 09-22 15:56

    申請實用工具軟件版主!【申請通過】

    標題:申請實用工具軟件區(qū)版主會員ID:jianqian1991年齡:20注冊日期:忘記了!申請日期:2010-04-27申請版塊:實用工具軟件特長及愛好:籃球,電影申請理由:無!每天都到這里下資料!問問題!總不能沒點貢獻!自學階段沒有技術(shù)!只想申請個
    發(fā)表于 04-27 09:10

    51單片機實用工具

    51單片機實用工具
    發(fā)表于 12-20 22:36

    LabVIEW實用工具***寶典課件

    不知道有沒有人上傳過《labview實用工具詳解》和寶典配合真的很贊,不過只有前幾章,我是從圖書館借的書,大家可以買一本
    發(fā)表于 01-25 22:40

    Labview實用工具詳解 代碼下載

    本帖最后由 tòrγㄚ 于 2015-7-8 10:10 編輯 Labview實用工具詳解 代碼下載
    發(fā)表于 06-30 15:43

    LabVIEW實用工具詳解簡版.pdf

    LabVIEW實用工具詳解簡版[url=https://bbs.elecfans.com/forum.php?mod=attachment&aid=MjcwNTU1fDk1ZTc1NWUyfDE0MzgwNDM5Nzl8MTM3MTg4fDUwMjI1MQ%3D%3D][/url]
    發(fā)表于 07-28 08:34

    labview實用工具詳解 配套程序

    labview實用工具詳解 配套程序
    發(fā)表于 10-22 01:04

    uartassist串口調(diào)試助手_實用工具

    uartassist串口調(diào)試助手_實用工具,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-17 11:16 ?40次下載

    串口調(diào)試軟件實用工具免費下載

    電子發(fā)燒友網(wǎng)站提供《串口調(diào)試軟件實用工具免費下載.rar》資料免費下載
    發(fā)表于 12-25 10:06 ?7次下載

    多種電子工程師實用工具大全

    本文主要介紹了多種電子工程師實用工具大全.
    發(fā)表于 06-27 08:00 ?139次下載
    多種電子工程師<b class='flag-5'>實用工具</b>大全

    電阻色環(huán)的識別實用工具應(yīng)用程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是電阻色環(huán)的識別實用工具應(yīng)用程序免費下載。
    發(fā)表于 11-12 08:00 ?5次下載
    電阻色環(huán)的識別<b class='flag-5'>實用工具</b>應(yīng)用程序免費下載

    windows啟動修復實用工具免費下載

    本文檔的主要內(nèi)容詳細介紹的是windows啟動修復實用工具免費下載。
    發(fā)表于 12-10 08:00 ?1次下載
    windows啟動修復<b class='flag-5'>實用工具</b>免費下載

    LLC計算的實用工具應(yīng)用程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是LLC計算的實用工具應(yīng)用程序免費下載。
    發(fā)表于 03-31 08:00 ?91次下載
    LLC計算的<b class='flag-5'>實用工具</b>應(yīng)用程序免費下載

    頻率電感電容計算的實用工具免費下載

    本文檔的主要內(nèi)容詳細介紹的是頻率電感電容計算的實用工具免費下載。
    發(fā)表于 05-06 16:38 ?47次下載
    頻率電感電容計算的<b class='flag-5'>實用工具</b>免費下載

    如何使用 Python 來創(chuàng)建一些強大的應(yīng)用和實用工具

    本文將探討如何以 Zynq UltraScale 器件上的 IP 核為目標,使用 Python 來創(chuàng)建一些強大的應(yīng)用和實用工具。此處提供了一程序包,供您用于讀取設(shè)備樹和訪問 IP 核。此外還提供一
    發(fā)表于 09-08 10:23 ?663次閱讀