• python笔记6


    日志模块

    1 logger对象 用来产生日志
    logger1 = logging.getLogger("银行业务相关")
    日志名是用来区分记录的日志相关信息

    2 filter对象 用来过滤日志
    3 formmatter对象 定制日志的格式

    4 handler对象 控制日志的去向 1 文件 2终端
    fh1 = logging.FileHandler("a1.log","encoding=utf-8")

    ch = logging.StreamHandler()

    建立logger对象与handler的绑定对象

    logger1.addHandler(fh1)

    logger1.addHandler(ch)

    format 对象,定制日志的格式

    formatter1 = logging.Formatter(
    fmt = ""
    datefmt =
    )

    为handler对象绑定日志格式

    fh1.setFormatter(formatter)

    d设置日志级别‘

    1 logger
    2 handler 只有2层控制,最终日志才会进入对象
    logger.setLevel(10)

    格式

    import os
    LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
    'lqm_format': {
    'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
    },
    'simple': {
    'format': '%(levelname)s %(message)s'
    },
    },
    'filters': {
    },
    'handlers': {
    'system': {
    'class': 'logging.handlers.TimedRotatingFileHandler',
    ## 'filename': os.getenv('LOGS_path', 'logs') + "/" + "system.log",
    'filename': os.path.join(os.getenv('LOGS_path', 'logs') ,"system.log"),
    'formatter': 'lqm_format',
    'when': 'midnight',
    'interval': 1,
    'backupCount': 30,
    },
    'user': {
    'class': 'logging.handlers.TimedRotatingFileHandler',
    'filename': os.getenv('LOGS_path', 'logs') + "/" + "user.log",
    'formatter': 'lqm_format',
    'when': 'midnight',
    'interval': 1,
    'backupCount': 30,
    },
    },
    'loggers': {
    'user': {
    'handlers': ['user', ],
    'level': os.getenv('LOGS_level', 'DEBUG'),
    'propagate': True,
    },
    'system': {
    'handlers': ['system', ],
    'level': os.getenv('LOGS_level', 'DEBUG'),
    'propagate': True,
    },
    }
    }

    二 序列 化
    json
    只能支持部分python的数据类型,所语言类型都支持有
    pickle
    只有python支持,包含所有python的类型

    dic = {'name':"esz"}
    with open("user.json",w) as f:
    ##等于将dic的文件,给写入f中
    json.dump(dic,f)
    ## 独处f的数据并放入dict中
    dic = json.load(f)

    1 import pickle
    2
    3 dic={'name':'alvin','age':23,'sex':'male'}
    4
    5 print(type(dic))#<class 'dict'>
    6
    7 j=pickle.dumps(dic)
    8 print(type(j))#<class 'bytes'>
    9
    10
    11 f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes'
    12 f.write(j) #-------------------等价于pickle.dump(dic,f)
    13
    14 f.close()
    15 #-------------------------反序列化
    16 import pickle
    17 f=open('序列化对象_pickle','rb')
    18
    19 data=pickle.loads(f.read())# 等价于data=pickle.load(f)
    20
    21
    22 print(data['age'])

    三 hash模块

     hash 1  校验文本内容
          2  hash 固定
          3 明文转密码进行传输
    
    m = hashlib.md5()
    m.update(b"hello")   这个等于  m.update("hello".encode("utf-8"))
    m.update(b"ss")
    m.hexdigest() 获取到密文密码
    
    
    
    import hmac
    m = hmac.new('sss'.encode("utf-8"))
    
    m1=hashlib.sha256()
    m1.update('hello'.encode('utf-8'))
    print(m1.hexdigest())
    
    m2=hashlib.sha512()
    m2.update('hello'.encode('utf-8'))
    print(m2.hexdigest())
    

    四 re 模块
    正则 用一堆特殊符号组成的规则去一个文本/字符串匹配符号规则的内容
    re.findall("w",str)

    重复匹配  。 ? * + {m,n}
    
    print(re.findall)
    

    import re

    换行 不匹配

    print(re.findall("a.c","123131asc,ssfafaa-c"))

    就算换行也匹配

    print(re.findall("a.c","123131asc,ssf afaa-c",re.DOTALL))

    ? 匹配0个或者一个 ,有必须匹配,如果没有也可以

    print(re.findall('ab?',"aa ssafsfaabbssa"))

    * 匹配0个或者无穷个

    + 匹配一个或者无穷个

    {n,m}

    print(re.findall('d+.?d+'))

    .* 贪婪匹配,选择最多的值

    print(re.findall("a.*c",'assfafasfcssssfafsfsf111223c'))

    匹配到 assfafasfcssssfafsfsf111223c

    .*? 非贪婪匹配,匹配早少的复合的值

    print(re.findall("a.*c",'assfafasfcssssfafsfsf111223c'))

    匹配到 asfc

    分组 ()与 ! conpan(ies|y) 可以取匹配 ies 与 y

    conpan(?ies|y) 可以匹配到 conpanies 和conpany

    print(re.findall('href="(.?)"','点击'))#['http://www.baidu.com']
    print(re.findall('href="(?:.
    ?)"','点击'))#['href="http://www.baidu.com"']

    [] 匹配的也是一个字符,但这个字符必须是[]内定义的

    print(re.findall('a[a-zA-Z]c',"abcsacadcaoc"))
    rex = 'a[+-*/]' ##去匹配+,- *,/

    print(re.findall('e','alex make love') )

  • 相关阅读:
    lnmp分离部署
    Nginx
    Keepalived脑裂监控
    KVM虚拟化
    mysql中间件proxysql实现mysql读写分离
    分离部署lnmp
    nginx
    Keepalived脑裂监控
    keepalived高可用
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/liuqimin/p/9033667.html
Copyright © 2020-2023  润新知