Boltons:超过230个的纯Python实用工具库

经过了几十年的发展,python 的轮子生态越来越丰富,例如针对网络请求有 requests,针对命令行开发有 typer 等等,这些第三方库给我们的日常开发带来了极大的便利。
今天给兄弟们推荐另一个第三方库 -- boltons,和大多数第三方库不太一样,它并不是针对某一功能的工具库,而是将开发中那些重复性(经常使用)及复杂度较高(不容易编写)较高的代码剥离出来,并按照操作对象分门别类整合在一起的工具库。
boltons 使用的是 bsd 许可证,到目前为止已经收录 超过230个 的纯 python实用工具库,这些工具库与 python 标准库并没有重合,是补充的关系,包括:
cacheutils 工具集:用于管理缓存,提供 lru 和 lri 等缓存方式debugutils 工具库:用于调试实用程序dictutils 工具库:映射类型(omd)ecoutils 工具库:生态系统分析fileutils工具库:文件系统帮助器,提供原子文件保存等功能formatutils 工具库:str.format() 工具箱funcutils 工具库:functools 修正gcutils 工具库:垃圾收集工具ioutils 工具库:增强输入/输出功能iterutils 工具库:itertools 改进jsonutils 工具库:json交互listutils 工具库:list 衍生物mathutils 工具库:提供数学函数的支持mboxutils 工具库:unix邮箱实用程序namedutils 工具库:提供两种轻量级容器类型pathutils 工具库:提供处理文件路径的函数queueutils 工具库:优先级队列,目前提供基于堆及基于排序列表两种队列实现setutils 工具库:indexedset 类型socketutils 工具库:socket 包装纸statsutils 工具库:统计基本面strutils 工具库:文本操作,涉及到方方面面,有非常多的工具函数tableutils 工具库:2d数据结构tbutils 工具库:回溯跟踪和调用堆栈,丰富的tracebackinfo类实现了栈追踪timeutils 工具库:增加 datetime 对象处理能力typeutils 工具库:类型处理urlutils 工具库:结构化url,方便对 url 进行处理# 1. 如何安装安装只需要一条命令
pip install boltons# 2. 实用范例boltons 的工具库函数非常多,不能一一举例,本文只摘取一些明哥认为经典的工具做为演示
遍历日期在 timeutils 工具库中有一个 daterange 可以对日期进行遍历,省去自己手动构造日期
>> > 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)其中参数的意义是:
step (int):元组 (year, month, day) 。inclusive (bool) :是否包含 stop 的日期范围转具体在 libvirt 里的 xml 上的 cpu 上通常都是这样表示的
如何将这种格式(emulatorpin 里的 cpuset)的范围,直接转成具体包含了哪些核呢?
使用 boltons 的 strutils 工具包的一个函数立马搞定
>> > 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 函数,可用于遍历和转换嵌套结构。
如下面这个例子,将删除所有 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 相似的函数还有一个 research,可用于递归匹配查找
假设有如下一个字典
root = {'a': {'b': 1, 'c': (2, 'd', 3)}, 'e': none}此时我想找出所有 value 为整数的的项,可以这样子实现
>> > 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'创建多级目录linux 上可以使用 mkdir -p 命令来创建多级目录,但若使用 python 来实现这个功能其实是非常麻烦的,如果不断的判断,一级一级往下去创建
而在 boltons 上的 fileutils 工具包提供的 mkdir_p 函数,可以达到 linux 上 mkdir -p 丝滑体验
>> > from boltons.fileutils import mkdir_p >> > >> > mkdir_p(/home/foo/bar/test)url结构处理一个 url 由下面结构组成
foo://user:pass@example.com:8042/over/there?name=ferret#nose _/ _______/ _________/ __/_________/ _________/ __/ | | | | | | |scheme userinfo host port path query fragment当我想从 url 中解析获取部分内容时,就要对该字符串进行正则匹配。
若使用 boltons 中的 urlutils 工具库 中的 url 类,可以很方便对获取任何 url 构成
>> > 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 巨大的工具箱时,也不用担心,每个模块都是独立的,没有依赖关系,可以直接复制到项目中使用。boltons 旨在为广泛的基本功能提供最好的支持,是对标准库的一个补充,并且将高级功能留给其他更加专业的第三方库。推荐给大家使用!

碳化硅与碳化硅(SiC)功率器件
关于塑磁转子特性 哪里有 报价 你想知道的在这里
日本富士AE系列谐振式声发射传感器
创想三维官宣首位品牌大使Kyle Reeser 共同传递3D打印公益梦想
苹果发布降温专利,解决手机发烫的问题
Boltons:超过230个的纯Python实用工具库
印度封城后 iPhone XR等机型生产停滞
电感的基本知识
百度彭亮:完善的安全体系和学习型PnC是实现全无人运营必由之路
驭势科技宣布无人驾驶物流车已成功试运行
如何在Modicon M580实施CANopen现场总线
小米目前首款最便宜的8G运存手机小米9SE,跌破二千了
海康威视视频技术提高森林防火综合防控能力
5G时代的到来将催生更多光电新型器件的应用
航空航天事业发展迅速,未来高端惯性传感器市场将复苏
电子电路故障查询方法
天线方向图的特征参数与天线的方向图作图
给同洲卫星接收机加装监听,Audio Monitoring
FreeRTOS任务调度器外部接口、以及大体作用,基本组成情况
小米MIUI官方:MIUI9 7月26日见!明日下午还有Big news!