經(jīng)過(guò)了幾十年的發(fā)展,Python 的輪子生態(tài)越來(lái)越豐富,例如針對(duì)網(wǎng)絡(luò)請(qǐng)求有 requests,針對(duì)命令行開(kāi)發(fā)有 typer 等等,這些第三方庫(kù)給我們的日常開(kāi)發(fā)帶來(lái)了極大的便利。
今天給兄弟們推薦另一個(gè)第三方庫(kù) -- Boltons
,和大多數(shù)第三方庫(kù)不太一樣,它并不是針對(duì)某一功能的工具庫(kù),而是將開(kāi)發(fā)中那些重復(fù)性(經(jīng)常使用)及復(fù)雜度較高(不容易編寫(xiě))較高的代碼剝離出來(lái),并按照操作對(duì)象分門(mén)別類(lèi)整合在一起的工具庫(kù)。
Boltons 使用的是 BSD 許可證,到目前為止已經(jīng)收錄 超過(guò)230個(gè) 的純 Python實(shí)用工具庫(kù),這些工具庫(kù)與 Python 標(biāo)準(zhǔn)庫(kù)并沒(méi)有重合,是補(bǔ)充的關(guān)系,包括:
- cacheutils 工具集:用于管理緩存,提供 LRU 和 LRI 等緩存方式
- debugutils 工具庫(kù):用于調(diào)試實(shí)用程序
- dictutils 工具庫(kù):映射類(lèi)型(OMD)
- ecoutils 工具庫(kù):生態(tài)系統(tǒng)分析
- fileutils工具庫(kù):文件系統(tǒng)幫助器,提供原子文件保存等功能
- formatutils 工具庫(kù):str.format() 工具箱
- funcutils 工具庫(kù):functools 修正
- gcutils 工具庫(kù):垃圾收集工具
- ioutils 工具庫(kù):增強(qiáng)輸入/輸出功能
- iterutils 工具庫(kù):itertools 改進(jìn)
- jsonutils 工具庫(kù):JSON交互
- listutils 工具庫(kù):list 衍生物
- mathutils 工具庫(kù):提供數(shù)學(xué)函數(shù)的支持
- mboxutils 工具庫(kù):Unix郵箱實(shí)用程序
- namedutils 工具庫(kù):提供兩種輕量級(jí)容器類(lèi)型
- pathutils 工具庫(kù):提供處理文件路徑的函數(shù)
- queueutils 工具庫(kù):優(yōu)先級(jí)隊(duì)列,目前提供基于堆及基于排序列表兩種隊(duì)列實(shí)現(xiàn)
- setutils 工具庫(kù):IndexedSet 類(lèi)型
- socketutils 工具庫(kù):socket 包裝紙
- statsutils 工具庫(kù):統(tǒng)計(jì)基本面
- strutils 工具庫(kù):文本操作,涉及到方方面面,有非常多的工具函數(shù)
- tableutils 工具庫(kù):2D數(shù)據(jù)結(jié)構(gòu)
- tbutils 工具庫(kù):回溯跟蹤和調(diào)用堆棧,豐富的Tracebackinfo類(lèi)實(shí)現(xiàn)了棧追蹤
- timeutils 工具庫(kù):增加 datetime 對(duì)象處理能力
- typeutils 工具庫(kù):類(lèi)型處理
- urlutils 工具庫(kù):結(jié)構(gòu)化URL,方便對(duì) URL 進(jìn)行處理
# 1. 如何安裝
安裝只需要一條命令
pip install boltons
# 2. 實(shí)用范例
Boltons 的工具庫(kù)函數(shù)非常多,不能一一舉例,本文只摘取一些明哥認(rèn)為經(jīng)典的工具做為演示
遍歷日期
在 timeutils 工具庫(kù)中有一個(gè) daterange 可以對(duì)日期進(jìn)行遍歷,省去自己手動(dòng)構(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)
當(dāng)然,你也可以指定遍歷的間隔
>> > 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 工具包的一個(gè)函數(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 工具包里提供一個(gè) remap 函數(shù),可用于遍歷和轉(zhuǎn)換嵌套結(jié)構(gòu)。
如下面這個(gè)例子,將刪除所有 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ù)還有一個(gè) research,可用于遞歸匹配查找
假設(shè)有如下一個(gè)字典
root = {'a': {'b': 1, 'c': (2, 'd', 3)}, 'e': None}
此時(shí)我想找出所有 value 為整數(shù)的的項(xiàng),可以這樣子實(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)]
流式讀取多文件
如果你有多個(gè)文件需要連接起來(lái)處理,可以使用 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)建多級(jí)目錄
Linux 上可以使用 mkdir -p
命令來(lái)創(chuàng)建多級(jí)目錄,但若使用 Python 來(lái)實(shí)現(xiàn)這個(gè)功能其實(shí)是非常麻煩的,如果不斷的判斷,一級(jí)一級(jí)往下去創(chuàng)建
而在 boltons 上的 fileutils 工具包提供的 mkdir_p 函數(shù),可以達(dá)到 Linux 上 mkdir -p
絲滑體驗(yàn)
>> > from boltons.fileutils import mkdir_p
>> >
>> > mkdir_p("/home/foo/bar/test")
URL結(jié)構(gòu)處理
一個(gè) URL 由下面結(jié)構(gòu)組成
foo://user:[email protected]:8042/over/there?name=ferret#nose
_/ _______/ _________/ __/_________/ _________/ __/
| | | | | | |
scheme userinfo host port path query fragment
當(dāng)我想從 URL 中解析獲取部分內(nèi)容時(shí),就要對(duì)該字符串進(jìn)行正則匹配。
若使用 boltons 中的 urlutils 工具庫(kù) 中的 URL 類(lèi),可以很方便對(duì)獲取任何 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. 寫(xiě)在最后
Boltons 是純Python,如果你不想引入 Boltons 巨大的工具箱時(shí),也不用擔(dān)心,每個(gè)模塊都是獨(dú)立的,沒(méi)有依賴關(guān)系,可以直接復(fù)制到項(xiàng)目中使用。Boltons 旨在為廣泛的基本功能提供最好的支持,是對(duì)標(biāo)準(zhǔn)庫(kù)的一個(gè)補(bǔ)充,并且將高級(jí)功能留給其他更加專(zhuān)業(yè)的第三方庫(kù)。推薦給大家使用!
-
緩存
+關(guān)注
關(guān)注
1文章
245瀏覽量
27038 -
代碼
+關(guān)注
關(guān)注
30文章
4886瀏覽量
70244 -
工具
+關(guān)注
關(guān)注
4文章
314瀏覽量
28160 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86163
發(fā)布評(píng)論請(qǐng)先 登錄
matlab的實(shí)用工具命令
申請(qǐng)實(shí)用工具軟件版主!【申請(qǐng)通過(guò)】
LabVIEW實(shí)用工具***寶典課件
LabVIEW實(shí)用工具詳解簡(jiǎn)版.pdf
調(diào)整線條寬度的實(shí)用工具
uartassist串口調(diào)試助手_實(shí)用工具
電阻色環(huán)的識(shí)別實(shí)用工具應(yīng)用程序免費(fèi)下載

windows啟動(dòng)修復(fù)實(shí)用工具免費(fèi)下載

LLC計(jì)算的實(shí)用工具應(yīng)用程序免費(fèi)下載

頻率電感電容計(jì)算的實(shí)用工具免費(fèi)下載

評(píng)論