• Python 模块(二)


    1 logging 模块

    logging有两种的配置的方式,configure、logger

    1.1 config方式

    import logging
    '''
    日志的配置:config模式
    只能选择在屏幕或者在文件输出
    '''
    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s [%(lineno)s] %(message)s' ,
                        filename='log.txt',
                        filemode='a'
                        )
    # logging.debug('debug message')  只有这些内容的时候是只显示在屏幕
    # logging.info('info message')
    # logging.warning('warning message')
    # logging.error('error message')
    # logging.critical('critical message')
    logging.info('info message')
    

    通过logging.basicConig可以配置输出的格式,level=DEBUG,还可以是INFO、WARNING、ERROR、DIGITAL,这个的优先级是从上往下的。设置好了哪一个就会显示他后面的。

    1.2 logger

    推荐用logger

    默认的情况是输出到屏幕的

    import logging
    logger=logging.getLogger()
    
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warning message')
    logger.error('error message')
    logger.critical('critical message')
    

    可通过

    import logging
    
    
    logger=logging.getLogger()
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    fh=logging.FileHandler('test.txt') # 文件流
    sh=logging.StreamHandler() # 屏幕流
    
    fh.setFormatter(formatter)  # 这是通过对象实现的设置格式
    sh.setFormatter(formatter)  #
    
    
    logger.addHandler(fh)
    logger.addHandler(sh)
    
    logger.debug(' logger debug message')
    logger.info('logger info message')
    logger.warning('logger warning message')
    logger.error('logger error message')
    logger.critical('logger critical message')
    

    函数的方法:

    def logger():
        logger = logging.getLogger()  # 吸星大法
    
        fh = logging.FileHandler('logger.txt')  # 文件流
        sh = logging.StreamHandler()            # 屏幕流
    
        logger.addHandler(fh)  # 追加写  设置成文件写入
        logger.addHandler(sh)  # 默认是屏幕流 关闭后就屏幕不输出
    
        logger.setLevel(logging.DEBUG)  # 设置等级 操作的对象是logger
    
        fm = logging.Formatter('%(asctime)s [%(lineno)s] %(message)s')
    
        fh.setFormatter(fm)  # 文件的对象
        # sh.setFormatter(fm) # 屏幕的对象 添加格式
        return logger
    
    logger1=logger()  # 现在是把函数的运行结果给一个对象
    
    # 对象能够使用方法
    logger1.debug('debug message')
    logger1.info('info message')
    logger1.warning('warning message')
    logger1.error('error message')
    logger1.critical('critical message')
    

    2 序列化模块

    2.1 JSON

    json是不同语言之间的数据准换

    序列化 反序列化

    import json
    '''
    序列化
    '''
    d={'a':123,"b":456} # 数据格式是字典
    s=json.dumps(d)  # 转换成json字符串(实际是Unicode)
    print(s)  # 这是json中的数据  {"a": 123, "b": 456}  是双引号
    print(type(s))
    
    # f=open('b.txt','w')
    # f.write(s)
    # f.close()
    
    '''
    反序列化
    '''
    f=open('b.txt')
    data=f.read()
    print(data)
    
    data2=json.loads(data)   # 现在就是字典的格式
    print(data2)
    
     json.dump(d,f) # d 是字典  f是文件句柄  有写入的操作
    

    json 应用

    import json
    i=10
    s='hello'
    t=(1,4,6)
    l=[3,5,7]
    d={'name':"aa"}
    
    json_str1=json.dumps(i)
    json_str2=json.dumps(s)
    json_str3=json.dumps(t)
    json_str4=json.dumps(l)
    json_str5=json.dumps(d)
    
    print(json_str1)   #'10'
    print(json_str2)   #'"hello"'
    print(json_str3)   #'[1, 4, 6]'   # 元组转换成json格式
    print(json_str4)   #'[3, 5, 7]'
    print(json_str5)   #'{"name": "aa"}'
    

    2.2 pickle模块

    在python中能够序列化任何数据类型,是Python专用 的

    序列化

    import pickle  # pickle 是Python文件中间转换的
    import datetime
    
    # print(datetime.datetime.now())
    t=datetime.datetime.now()
    d={'data':t}
    
    s=pickle.dump(d,open('new','wb'))  # json 不支持时间的格式
    
    print(s)
    

    反序列化

    f=open('new','rb')
    data=pickle.loads(f.read())
    print(data)
    

    3 正则模块re

    正则是对字符串的模糊匹配

    re.findall(‘元字符’,”字符串”)

    是字符串中的每一个去对应元字符中的规则

    元字符

    1.通配符"."    # 不能配换行符
    ,如果有换行符,返回一个空列表
    2.模糊匹配"*"    [0,+∞]
    3.              +     [1,+∞]
    4.             ?     [0,1]
    5.              {}       {0,}==*   {1,}==+   {0,1}==?
    6.字符集 [ab]  a b 是或者的关系
        * + 是普通字符
        - ^  有特殊用处  
        [0-9]+
        [a-z]+
        [^2]   取反
        [^d ]  单个
        [^d]+  多个连续的
    7.分组()    "(ab)+","add"  # 分组中默认只有一个
    取消优先级(?:)
    8. | :或
    9.   
              d   
              w
              .   
              d  匹配任何十进制数;它相当于类 [0-9]。
    D 匹配任何非数字字符;它相当于类 [^0-9]。
    s  匹配任何空白字符;它相当于类 [ 	
    
    fv]。
    S 匹配任何非空白字符;它相当于类 [^ 	
    
    fv]。
    w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
    W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
      匹配一个特殊字符边界,比如空格 ,&,#等
    
            r'',''  在ASCII中有专门的意思
    

    命名分组

    res=re.search(r"(?P<A>w+)\article\(?P<id>d+)", r"abcarticle123", flags=0)
    print(res)
    print(res.group("A"))
    print(res.group("id"))
    

    结果:
    abc
    123

    无命名分组

    res=re.findall("(ad)+abc", "adabcnnf", flags=0)  
    res=re.findall("(?:ad)+abc", "adabcnnf", flags=0)  # 取消优先级
    

    结果:
    [‘ad’]
    [‘adabc’]

    finditer 方法

    res=re.finditer("d+", "ad324daa", flags=0)
    print(res)
    

    结果:是一个生成器
    callable_iterator object at 0x0000000002B29240>
    用next方法

    print(next(res).group())
    print(next(res).group())
    

    search 方法

    search 值匹配第一个结果

    res= re.search("d+", "sjasdff454asef2352", flags=0)
    print(res)
    print(res.group())
    

    match 方法

    mach只在字符串开始的位置匹配

    res = re.match("d+", "123nljklkl2565+6", flags=0)
    print(res)
    print(res.group())
    

    split 方法

    maxsplit是最大的分割次数,默认是0

    res=re.split("d+", "asd123fk234as123df1231sdf132fff", maxsplit=4, flags=0)
    print(res)
    

    [‘asd’, ‘fk’, ‘as’, ‘df’, ‘sdf132fff’] 第5次没有继续分割

    sub 方法

    res = re.sub("d+", "A","abc2342abc123aaa123",  count=3,flags=0)
    print(res)
    

    结果:
    abcAabcAaaaA

    compile 方法

    res = re.compile("d+", flags=0)
    res2 = res.findall("hello1232")   # 把编译好的直接用
    print(res2)
    
  • 相关阅读:
    设计模式的C语言应用-外观模式-第八章
    00071_基本类型包装类
    win7不能在同一窗口打开文件夹,解决办法
    浏览器主页被搜狗劫持的解决办法,慎用宁美国度的安装软件,慎用不正规来源的软件
    使用inotify-tools与rsync构建实时备份系统
    浅淡 RxJS WebSocket
    SpringMVC大文件(百M以上)的上传下载实现技术
    C#.NET大文件(百M以上)的上传下载实现技术
    JSP大文件(10G以上)的上传下载实现技术
    JAVA大文件(10G以上)的上传下载实现技术
  • 原文地址:https://www.cnblogs.com/Python666/p/6785490.html
Copyright © 2020-2023  润新知