让你爱不释手的 Python 模块

logzero
在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。
python 语言也自带了日志模块 logging, 对于熟悉该模块的人使用起来可能是得心应手, 不过对于新手或者只是想简单使用日志基本用法的人来说, 该模块不是那么的友好.为此, 我查询了 python 相关的日志模块, 其中大家推荐比较多的是 logbook 和 logzero, 我查看了下它们的使用文档, 发现 logbook 类似于 logging 模块, 功能比较健全, 不过我没有去详细了解,我被它的文档吓退了. 由于这和我的需求不同, 我只是想简单使用下, 希望模块简约, 各种信息(debug, info, warn, error)颜色鲜明, 能记录下我的"炼丹"信息就好. 幸好, logzero 就是这样的产品, 详细见 logzero 官方文档.
官方文档: logzero: Python logging made easy
logzero 安装
pip install -U logzero
pip 参数说明:
-U, --upgrade Upgrade all specified packages to the newest available version. The handling of dependencies depends on the upgrade-strategy used.
使用自带logger对象
logzero 提供了初始化好的 logger 对象, 使用简单, 简单例子如下
import logging
import logzero
from logzero import logger
import os
logger.debug("hello")
logger.info("info")
logger.warning("warning")
logger.error("error")
# set log level
logzero.loglevel(logging.INFO)
# set log into file
logzero.logfile(os.path.join(os.getcwd(), 'log.txt'), maxBytes=1e6, backupCount=3)
# Log messages
logger.info("This log message goes to the console and the logfile")
# set log formatter
logzero.formatter(logging.Formatter('%(name)s-%(asctime)s-%(levelname)s: %(message)s'))
logger.info("This log message goes to the console and the logfile")
输出如下:

各种信息颜色分明, 看着很舒服是吧, 然而, 这样使用着会比较别扭.
- 首先, 提供的 logger 对象由于是已经初始化好的, 名称不能改变, 日志默认名称为 logzero_default;
- 其次, 已经创建了 logger, 然后使用 logzero 不断改变 logger 的属性, 用着别扭.
好消息是, logzero 提供了可以自己建立 logger 对象的方法, 使用起来也是简单明了.
自己构造logger对象
使用方法如下
import logging
import os
from logzero import setup_logger, LogFormatter
# custom formatter must be inited in setup_logger()
logger = setup_logger(name=__name__,
logfile=os.path.join(os.getcwd(), 'log.txt'),
level=logging.INFO,
formatter=logging.Formatter('[%(name)s-%(asctime)s-%(levelname)s] %(message)s'))
var1 = 'happy'
var2 = 'ending'
# Log some variables
logger.info("var1: %s, var2: %s", var1, var2)
输出:

其中, formatter 默认使用 logzero 的配置, 你也可能像我一样比较喜欢logzero 默认的 formatter 才会使用它, 所以一般不用设置. 上面为演示效果才设置的.
设置时间输出格式
logzero 默认的时间输出格式如下

日期 190303 可能总感觉没有19-03-03舒服. 格式修改方法如下,
import logging
import os
from logzero import setup_logger, LogFormatter
formatter = LogFormatter(datefmt=logging.Formatter.default_time_format)
# custom formatter must be inited in setup_logger()
logger = setup_logger(name=__name__,
logfile=os.path.join(os.getcwd(), 'log.txt'),
level=logging.INFO,
formatter=formatter)
var1 = 'happy'
var2 = 'ending'
# Log some variables
logger.info("var1: %s, var2: %s", var1, var2)
输入如下图

logzero 的基本介绍就到这里了, 详细了解请下载, logzero 模块定义在一个文件中, 小巧易用.
argparse
argparse 官方教程写的太棒了, 照着走一遍, argparse 基本用法搞定.进阶请查看 python argparse模块介绍.
argparse基本用法:
- 当调用parse_args()时,可选参数将由 “ - ” 前缀标识,其余参数将被假定为位置参数;
- argparse将我们给它的选项视为字符串,除非我们另有说明, 如指定 type;
- 如果参数两个值实际上只有两个值有意义,真或假, 使用 action ="store_true";
- 如果 datatype 为 int,可以使用 choices = [0,1,2] 来限制有效的取值范围;
- 设置 action ="count",args 参数传递可以使用 -v,-vv,-vvv 表示整数 1, 2, 3;
- 如果选项互斥, 可以通过如下设置实现;
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
prettytable
from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
x.add_row(["Adelaide",1295, 1158259, 600.5])
x.add_row(["Brisbane",5905, 1857594, 1146.4])
print(x.get_string())
print(x.get_html_string())

retry
正如它的名字,retry是用来实现重试的。很多时候我们都需要重试功能,比如写爬虫的时候,有时候就会出现网络问题导致爬取失败,然后就需要重试了,一般我是这样写的(每隔两秒重试一次,共5次)
from retry import retry
@retry(tries=5, delay=2)
def do_something():
xxx
do_something()
colorama
https://pypi.org/project/colorama/
colorama n 彩色
from colorama import Fore, Back, Style
print(Fore.RED + 'some red text')
print(Back.GREEN + 'and with a green background')
print(Style.DIM + 'and in dim text')
print(Style.RESET_ALL)
print('back to normal now'

Others
glob https://docs.python.org/3/library/glob.html
让你爱不释手的 Python 模块的更多相关文章
- 使用C/C++写Python模块
最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...
- Python模块之configpraser
Python模块之configpraser 一. configpraser简介 用于处理特定格式的文件,其本质还是利用open来操作文件. 配置文件的格式: 使用"[]"内包含 ...
- Python模块之"prettytable"
Python模块之"prettytable" 摘要: Python通过prettytable模块可以将输出内容如表格方式整齐的输出.(对于用Python操作数据库会经常用到) 1. ...
- python 学习第五天,python模块
一,Python的模块导入 1,在写python的模块导入之前,先来讲一些Python中的概念性的问题 (1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质是.py ...
- windows下安装python模块
如何在windows下安装python模块 1. 官网下载安装包,比如(pip : https://pypi.python.org/pypi/pip#downloads) pip-9.0.1.tar. ...
- 安装第三方Python模块,增加InfoPi的健壮性
这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet 自动检测文本编码 2.lxml 用于解析 ...
- Python基础篇【第5篇】: Python模块基础(一)
模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...
- python 模块加载
python 模块加载 本文主要介绍python模块加载的过程. module的组成 所有的module都是由对象和对象之间的关系组成. type和object python中所有的东西都是对象,分为 ...
- pycharm安装python模块
这个工具真的好好,真的很喜欢,它很方便,很漂亮,各种好 pycharm安装python模块:file-setting-搜索project inte OK
随机推荐
- InheritedWidget
下面这个示例是InheritedWidgt的一个简单用法: class CounterProvider extends InheritedWidget{//数据之前必须加上final,下面这三个数据都 ...
- oracle实例安装到 4% 不能继续安装
较为悲催的问题, 一直不知道如何解决: 偶尔听到群里的大神提起: 今天特地拿出来分享一下: 希望大家碰到能早点解决 是CPU问题: 将cpu 核心数 改为 2的指数倍: 或者将cpu打上补丁就好了: ...
- C# 远程获取图片二进制
直接上代码, 紧做记录. public byte[] GetByteByImgUrl() { System.Net.WebRequest webreq = System.Net.WebRequest. ...
- CentOS下添加Root权限用户(超级用户)方法
1.添加普通用户[root@server ~]# useradd chenjiafa //添加一个名为chenjiafa的用户[root@server ~]# passwd chenjiafa ...
- Centos 32位 安装 NodeJS
准备命令: yum -y install gcc make gcc-c++ openssl-devel wget 下载源码及解压: wget https://nodejs.org/dist/v6.9. ...
- python代码格式
1,函数名:不要大写,都用小写,单词之间用下划线分隔 2,注释:注释的时候#后面要带空格 3,方法与方法之间空格两行 4,使用方法时,里面的参数用 逗号和空格 隔开 5,使用方法时,里面的参数“= ...
- JS快速排序 希尔排序 归并排序 选择排序
/* 快速排序 1.1 算法描述 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用.快速排序是一种既不浪费空间又可以快一 ...
- SVN Error:Error performing cleanup for
这个错误,是由于我误删了lib中的jar导致的 一 首先,下载 sqlite3 然后把sqlite3.exe 放到项目文件夹中的.svn文件夹. 如下: 二 接着运行cmd 转到.svn下 三 输入 ...
- 树&堆
树 什么是树? 大概像下面这样: 树的概念 树的每个点被称为节点: 连接的两个点,一个为父节点,一个为子节点,例如上图中,\(1\)是\(4\)的父节点,\(4\)是\(1\)的子节点: 没有父节点的 ...
- npm后台启动nuxt服务之 kill
后台启动 npm run start & ps aux | grep start 根据项目对应的id执行如下命令 kill xxxx