zoukankan      html  css  js  c++  java
  • 让你爱不释手的 Python 模块

    module

    logzero

    在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。

    python 语言也自带了日志模块 logging, 对于熟悉该模块的人使用起来可能是得心应手, 不过对于新手或者只是想简单使用日志基本用法的人来说, 该模块不是那么的友好.为此, 我查询了 python 相关的日志模块, 其中大家推荐比较多的是 logbooklogzero, 我查看了下它们的使用文档, 发现 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")
    
    

    输出如下:

    屏幕快照 2019-03-03 下午5.33.33

    各种信息颜色分明, 看着很舒服是吧, 然而, 这样使用着会比较别扭.

    • 首先, 提供的 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)
    

    输出:

    屏幕快照 2019-03-03 下午5.48.27

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

    设置时间输出格式

    logzero 默认的时间输出格式如下

    屏幕快照 2019-03-03 下午6.13.39

    日期 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)
    
    

    输入如下图

    屏幕快照 2019-03-03 下午6.11.42

    logzero 的基本介绍就到这里了, 详细了解请下载, logzero 模块定义在一个文件中, 小巧易用.

    argparse

    argparse 官方教程写的太棒了, 照着走一遍, argparse 基本用法搞定.进阶请查看 python argparse模块介绍.

    argparse基本用法:

    1. 当调用parse_args()时,可选参数将由 “ - ” 前缀标识,其余参数将被假定为位置参数;
    2. argparse将我们给它的选项视为字符串,除非我们另有说明, 如指定 type;
    3. 如果参数两个值实际上只有两个值有意义,真或假, 使用 action ="store_true";
    4. 如果 datatype 为 int,可以使用 choices = [0,1,2] 来限制有效的取值范围;
    5. 设置 action ="count",args 参数传递可以使用 -v,-vv,-vvv 表示整数 1, 2, 3;
    6. 如果选项互斥, 可以通过如下设置实现;
    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

    tabulate

    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())
    

    -w385

    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'
    

    -w225

    Others

    glob https://docs.python.org/3/library/glob.html



  • 相关阅读:
    Atlas 在web.config中的配置
    解决Windows 7 IIS7.5 用户 'IIS APPPOOL\{站点名} AppPool'登录失败
    IIS7 无法访问请求的页面,因为该页的相关配置数据无效。
    三国演义60条职场启示
    程序员,请对自己好一点!
    HTTP 错误 403.14 Forbidden Web 服务器被配置为不列出此目录的内容
    [转] 这样学英语三个月超过你过去学三年
    HTTP 错误 500.19 Internal Server Error
    软件项目经理新手上路(12) 给新手的建议
    CPU指令集扫盲帖 四
  • 原文地址:https://www.cnblogs.com/nowgood/p/PythonsuperModule.html
Copyright © 2011-2022 走看看