Package: bools
[toc]bools-0.4.3.2常用功能集合，更高效的编写代码安装pip3install-Ubools文档dbc 「数据库连接」ElasticSearch支持方便的对ES进行读写操作兼容ES6，ES7支持便捷的和pandas互操作write>>>frombools.dbcimportElasticSearch>>>es=ElasticSearch('localhost',9200)>>>es.write(index='test',data=[{'a':1,'b':2}]*2000,batch_size=1000)query、scroll_query>>>frombools.dbcimportElasticSearch>>>es=ElasticSearch('localhost',9200,patch_pandas=True)>>>es.query('test',{..."query":{..."terms":{..."a":[1]...}...}...})>>>es.scroll_query('test',{..."query":{..."terms":{..."a":[1]...}...}...},batch_size=1000)pd.read_es、pd.DataFrame.to_es特性：写入es自动完成类型映射（date，object，number），还可指定numeric_detection完成数值字符串的转换。读取直接转化为DataFrame>>>frombools.dbcimportElasticSearch>>>importpandasaspd>>>es=ElasticSearch('localhost',9200,patch_pandas=True)# 数据写入>>>pd.DataFrame({'v':[4,5,6]}).to_es(index='test')>>>pd.DataFrame({'v':['3.14','2.4',6]}).to_es(index='test',numeric_detection=True)>>>pd.DataFrame({'v':[7,8,9],'index':['test-1','test-2','test-1']}).to_es(index_col='index')# 数据读取>>>pd.read_es('test',query_body={})# 读取index="test"的全部数据（自动scroll读取）InfluxDB支持方便的对influxdb进行常用操作及基础优化支持便捷的和pandas互操作write、query同Elasticsearch操作pd.read_influxdb、pd.DataFrame.to_influxdb特性：自适应time列（字符串，date（有无时区），任意位时间戳）>>>frombools.dbcimportInfluxDB>>>importpandasaspd>>>influxdb=InfluxDB(host='localhost',port=8086,database='bowaer',patch_pandas=True)>>>pd.read_influxdb('select * from test').head()countsrcsucc_counttime2021-07-0718:07:52+08:000bowaer02021-07-0718:07:53+08:001bowaer12021-07-0718:07:54+08:002bowaer22021-07-0718:07:55+08:003bowaer32021-07-0718:07:56+08:004bowaer4datetime「时间日期处理」Datetime默认带有时区信息（Asia/Shanghai），支持和timedelta等互相操作。保留原生datetime.datetime所有方法和属性有一系列比原生datetime更简洁、高效的与时间字符串交互方式fromtimestamp特性：支持任意位数的时间戳>>>frombools.datetimeimportDatetime>>>Datetime.fromtimestamp(1660000000000)Datetime(2022,8,9,7,6,40,tzinfo=tzfile('/usr/share/zoneinfo/Asia/Shanghai'))from_str特性：无须指定format，且性能高于strptime（约2倍）>>>Datetime.from_str('2021-1-1 12:32:24')Datetime(2021,1,1,12,32,24,tzinfo=tzfile('/usr/share/zoneinfo/Asia/Shanghai'))>>>Datetime.from_str('2021-1-1T12:32')Datetime(2021,1,1,12,32,tzinfo=tzfile('/usr/share/zoneinfo/Asia/Shanghai'))to_str、str特性：便捷的输出时间字符串的任意部分>>>Datetime.now().str'2021-06-18 16:20:23'>>>Datetime.now().to_str(3,6)'16:20:30'from_datetime将原生datetime转化为Datetime对象>>>Datetime.from_datetime(datetime.now())Datetime(2021,6,18,16,23,11,569620,tzinfo=tzfile('/usr/share/zoneinfo/Asia/Shanghai'))Timedelta同datetime.timedelta，均可与Datetime互操作>>>Datetime.now()+Timedelta(days=1)Datetime(2021,6,19,16,25,33,188782,tzinfo=tzfile('/usr/share/zoneinfo/Asia/Shanghai'))>>>Datetime.now()+timedelta(hours=1)Datetime(2021,6,18,17,25,43,40131,tzinfo=tzfile('/usr/share/zoneinfo/Asia/Shanghai'))set_default_tz通过tz_id修改Datetime默认时区>>>frombools.datetimeimportset_default_tz>>>set_default_tz('Asia/Shanghai')set_default_format设置Datetime.to_str()输出的时间字符串格式，格式同strptime format>>>frombools.datetimeimportset_default_format>>>set_default_format('%Y-%m-%d%H:%M:%S')log「日志输出」Logger配置简单，输出带颜色区分的日志（通过ascii esc实现）debug：灰色，info：绿色，warning：黄色，error：红色>>>frombools.logimportLogger>>># Logger.init("DEBUG") 可通过init调整输出日志级别，默认输出>INFO>>>Logger.info('hello world')[2021-06-1816:34:36,561][INFO]:helloworld>>>Logger.error('hello world')[2021-06-1816:35:02,127][ERROR]:helloworldfunctools「工具函数」parallel多进程处理函数。特性：支持传递lambda函数和无参函数>>>frombools.functoolsimportparallel>>>parallel(lambdax:x**2)(range(4))[0,1,4,9]>>>parallel(lambda:2,count=2)(range(4))[2,2,2,2]catch异常处理装饰器，可传入闭包控制异常后执行函数或在异常后返回值>>>frombools.functoolsimportcatch>>>result=catch(except_return=1,log='计算报错')(lambda:1/0)()[2021-06-1816:39:33,449][ERROR]:计算报错Traceback(mostrecentcalllast):File"/Users/bowaer/PycharmProjects/bools/bools/functools/functools.py",line10,inwrapperreturnfunc(*args,**kwargs)File"<stdin>",line1,in<lambda>ZeroDivisionError:divisionbyzero>>>result1>>>@catch(except_return=2)...deffunc(n):...return1/n...>>>func(2)0.5>>>func(0)[2021-06-1816:41:31,912][ERROR]:Traceback(mostrecentcalllast):File"/Users/bowaer/PycharmProjects/bools/bools/functools/functools.py",line10,inwrapperreturnfunc(*args,**kwargs)File"<stdin>",line3,infuncZeroDivisionError:divisionbyzero2timeit函数时间统计装饰器>>>frombools.functoolsimporttimeit>>>costs=timeit(count=10,return_costs=True)(time.sleep)(0.1)[2021-06-1817:29:37,064][INFO]:平均执行时间:0.103s>>>costs[0.10266709327697754,0.105194091796875,0.10502386093139648,0.10092806816101074,0.10246896743774414,0.10508394241333008,0.10145998001098633,0.10406613349914551,0.10434389114379883,0.10046100616455078]>>>frombools.functoolsimporttimeit>>>@timeit...deftest():...foriinrange(1000000):...'hello'+'world'...>>>test()[2021-06-1818:03:16,937][INFO]:平均执行时间:0.019s版本历史0.4.0增加dbc（数据库连接）包，包含Elasticsearch模块支持es读写以及对应pandas的操作支持influxdb常用操作及对应pandas操作优化pandas dataframe写入数据库性能和内存解决numpy特殊版本下（已知1.19.3）dtype类型in list判断时报Cannot interpret xxxx as a data type0.3.3增加并行处理函数parallel，支持传递lambda函数和无参函数0.3.2装饰器函数支持兼容无参数使用，即@timeit == @timeit()catch增加exception参数支持自定义异常捕获类型0.3.1functools增加timeit统计函数执行时间0.3.0增加functools模块及catch异常处理0.2.2修复Datetime和timedelta互操作返回原生datetime对象的问题0.2.0增加log模块0.1.0增加datetime模块