内置 230+ 工具,它值得被官方纳入标准库

news2024/12/24 2:15:46

经过了几十年的发展,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. 如何安装
    • 2. 实用范例
      • 遍历日期
      • 范围转具体
      • 递归映射
      • 流式读取多文件
      • 创建多级目录
      • URL结构处理
    • 3. 写在最后

技术提升

项目代码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:dkl88191,备注:来自CSDN
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

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 旨在为广泛的基本功能提供最好的支持,是对标准库的一个补充,并且将高级功能留给其他更加专业的第三方库。推荐给大家使用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go语言之不必要的拷贝

其实我也是个golang开发者~~ Go语言本来就以轻量快速著称,一位GitHub员工却偶然发现: 只改变一个字符的位置,能把一段代码运行速度提高足足42%。 简直就像是…… 这个简单有效的技巧一经发布,就引来众多程序员围观。 原作者自己…

论文中常见的拟合散点验证图(R语言版)

论文中常见的拟合散点验证图(R语言版) 如上图所示,是论文中常见的validation图,python也能实现相似的图绘。 今天先介绍R语言版,python改期再介绍吧 这张图需要依次实现下列功能: data实测与data模拟的散…

RabbitMQ系列【11】延迟队列

有道无术,术尚可求,有术无道,止于术。 文章目录前言1. 过期消息实现延迟队列2. 过期队列实现延迟队列3. 插件实现延迟队列3.1 安装插件3.2 代码实现3.3 测试前言 延迟队列:即消息进入队列后不会立即被消费,只有到达指…

MySQL事务隔离机制 -- 必须说透

文章目录前言一、什么是数据库事务二、事务并发带来的4类问题三、事务4种隔离级别四、Mysql演示4种隔离级别总结前言 如何控制并发是数据库领域中非常重要的问题之一,MySQL为了解决并发带来的问题,设计了事务隔离机制、锁机制、MVCC机制,用一…

c# 实验七 图像列表框及树形视图控件的使用

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:《项目专栏》 📧如果文章知识点有错误的地方&#xf…

[附源码]java毕业设计四六级考试管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

m基于matlab的wcdma软切换算法的研究分析和仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 软切换是WCDMA系统的关键技术之一,软切换算法和相关参数的设置直接影响着系统的容量和服务质量。通过WCDMA系统的软切换技术可以提高小区覆盖率和系统容量。所以软切换技术是…

【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 类 简单介绍与使用

文章目录 1.概述2. LocalVariablesSorter#2.1 class info2.2 fields3.案例3.1 编码实现3.2 编码实现v21.概述 在上一节:【ASM】字节码操作 工具类与常用类 GeneratorAdapter 介绍 我们知道了对于GeneratorAdapter 类来说,它非常重要的一个特点:将一些visitXxx()方法封装成一…

Java面向对象详解(上)

Java面向对象详解(上)🪅面向对象与面向过程的区分✨面向过程:✨面向对象:🪅类是什么?🪅对象是什么?🪅类的结构🪅类中方法:✨成员方法与…

实战讲解SpringBoot启动时自动加载数据库数据到内存:通过回调方法自动运行Bean(图+文+源码)

1 缘起 在补充SpringCloud网关(Gateway)配置白名单相关知识过程中, 有两种实现方案: (1)SpringBoot的启动配置文件application.yml进行配置; (2)自动加载MySQL数据库中的…

【人工智能】Mindspore框架中保存加载模型

前言 MindSpore着重提升易用性并降低AI开发者的开发门槛,MindSpore原生适应每个场景包括端、边缘和云,并能够在按需协同的基础上,通过实现AI算法即代码,使开发态变得更加友好,显著减少模型开发时间,降低模…

深度学习在图像处理中的应用学习笔记

这篇学习笔记用于记录本人在读研期间的学习内容 在刚入学不久,发现一个B站up主对这方面进行了一系列的整理总结,并上传了代码,并且非常成体系,因此本人打算跟着这位up主的步骤,对这方面进行学习并且做一个记录&#xf…

Vue安装并使用axios发送请求

前言 本文主要介绍的是使用在Vue项目中安装并使用axios发送请求 axios介绍 axios是一种Web数据交互方式 它是一个基于promise的网络请求库,作用于node.js和浏览器中,它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中) 本质是对原生XHRX…

NAND Flash原理

Flash 简介 Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失&…

BGP→→

BGP-4 提供了一套新的机制以支持无类域间路由。这些机制包括支持网络前缀的通告、取消 BGP 网络中 “ 类 ” 的概念。 BGP-4 也引入机制支持路由聚合,包括 AS 路径的集合。 特点 BGP属于外部或域间路由协议。BGP的主要目标是为处于不同AS中的路由器之间进行路由信…

Spring Cloud Config 配置中心

最简单的配置中心,就是启动一个服务作为服务方,之后各个需要获取配置的服务作为客户端来这个服务方获取配置。 Spring Cloud Config,可以用 git ,还可以用数据库、svn、本地文件等作为存储。 1. Config Server 引入 config-ser…

Day08--自定义组件的properties属性

提纲挈领: 1.properties属性 我的操作: 1》 2》 3》输出看看效果是不是真的有接收到。 ********************************* ********************************* ********************************* ********************************* **************…

Spring 源码阅读

1. beanFactory The root interface for accessing a Spring bean container. 2. BeanFactoryPostProcessor 对bean定义进行后置处理,比如jdbc类读取配置的密码,用户名等。 3.BeanPostProcessor public interface BeanPostProcessor {Object postProce…

ctfshow--RCE极限挑战

本周ctfshow的挑战注重点为RCE,主要利用是:自增绕过RCE RCE挑战1 属于简单类型 源码 error_reporting(0); highlight_file(__FILE__); $code $_POST[code]; $code str_replace("(","括号",$code); $code str_replace(".&q…

Arcgis使用教程(十一)ARCGIS地图制图之经纬网格设置参数详解

Arcgis地图制图中,经纬网格的添加详细参见: Arcgis使用教程(十)ARCGIS地图制图之经纬网格添加_空中旋转篮球的博客-CSDN博客 1.加载数据 在Arcmap中加载中国矢量图层数据(中国省级行政区图,国界线两个图层…