拒绝重复造轮子!python实用工具类及函数大推荐!

前言

从2015年转行程序员至今也有两年多了,当初自学的java却误打误撞进了python的坑,入职之后一天java也没有写过,或许这可以理解成缘分吧,哈哈!使用python工作久了,随手写一些小工具再所难免,不知不觉,我的工具包也增长到了几千行代码。其中有的函数依照别人的代码改写,也有的源于自己的灵感,我自认为还是挺好用的。现在统一规整后做成pip包,拿出来分享给大家使用。

函数都很小巧,代码实现相对简单,风格比较自由,尽可能不依赖其它安装包,极个别的工具依赖一些特定的驱动程序,比如redis,kafka, psutil,如果自己的项目没有相关需求,那么可以将需要的方法,类复制放到自己的项目中,不必完全安装ShichaoMa/toolkit。放心,我是不会追究版权的。

正文开始

安装toolkity

有朋友可能会想为什么不叫toolkit,我,也是那么想的。可是名字被别人占用了肿么办,只能在后面加个y,看起来正式而不失一点小俏皮。

安装完毕,来跟我学习几个常用函数的使用方法吧。

Timer简单好用的计时器

有时我们想对我们写的代码执行时间进行统计,通常我们会使用如下代码:

现在有了timer,一切都变的简单啦

同时,你还可以指定开始时间

ExceptContext异常捕获上下文

通常我们想捕获异常时,会写如下代码

现在我们可以用ExceptContext简单实现

其中ExceptContext接收4个参数

:param exception: 指定要监控的异常, 默认为Exception

:param func_name: 可以选择提供当前所在函数的名称,回调函数会提交到函数,用于跟踪,默认为None,自己判断调用函数名称

:param errback: 提供一个回调函数,如果发生了指定异常,就调用该函数,该函数的返回值为True时不会继续抛出异常 默认打出异常信息,返回True

:param finalback: finally要做的操作 默认返回是否发生异常。

通过自定义errback,我们可以对异常做任何想要的操作。

debuggerdebug小工具

有时我们可能会使用pdb来调试,经常会发生的情况是,我们在测试环境下调试,部署到生产之后,发现pdb.set_trace()忘记删除,导致代码在生产系统中卡住,这就很尴尬了。使用debugger,同时在测试环境中加入export DEBUG=True,可以轻松避免上述情况

duplicate保序去重函数

我们经常会遇到去重问题,比如

上述列表中有2个4,我们想去掉多余的4,但是不想顺序乱掉,如果使用list(set(ls))的方式,顺序会乱掉,因此我们可以使用duplicate函数来做

chain_all连接多个可迭代对象

safely_json_loads安全的将字符串变成json对象

对于空字符串,返回默认类型,对于使用单引号包裹的字符串,将其转换成双引号

format_html_string格式化html

去掉多余的html属性

....

除以上工具以外,还有很多工具非常有用,由于例子相对复杂,就不一一举例了,可以多关注我的github, 如ShichaoMa/proxy_factory项目,就有很多用例出现。

下面简单介绍一些其它工具

重试器,包装函数对指定异常进行重试

超时器,装饰函数并指定其超时时间

自实现groupby

cookie解析

查找字符串函数和类

查找字符串模块

获取可用端口

线程安全装饰器

慢保存或提交

类中的线程安全装饰器

获取ip

下面提供一些基础设施

common_stop_start_control :提供开,关,重启,状态等命令行服务

Singleton:单例元类

Logger:提供日志服务

SettingsWrapper: 提供配置信息服务

ParallelMonitor: 使用Singleton构建, 多线程多进程统一管理器

LoggingMonitor:内建Logger和Settings

Service: 继承自ParallelMonitor,LoggingMonitor并实现common_stop_start_control 接口。编写微服务专用基类。

ProxyPool:基于redis的代理池,继承自Logger

ItemConsumer:kafka消费者,继承自Service

ItemProducer:kafka生产者,继承自Service

RedisQueue:基于redis的队列

FifoDiskQueue:持久化 FIFO 队列

Translate:翻译器,继承自ProxyPool,安装即可用的翻译器见ShichaoMa/translate_html

除以上工具之外,还有一些小工具,小函数,如果有兴趣的话,自己去源码里发现吧。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180511A23PG800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券