• logging模块,序列化,range模块


    logging模块:

    模块的功能是记录我们软件的各种状态,然后输出到文件中,方便查看维护代码.一般包括debug,infor,warning,error,critical,日志级别.

    函数式简单配置:

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

    灵活配置日志级别,日志格式,输出位置:

    函数形式 手动挡
    写入文件后无法读取,而且文件编码形式为gbk,不可更改
    import logging
    logging.basicConfig(
    level = logging.warning,
     level = 10,
    format = '%(asctime)s - %(name)s - [%(lineno)d] - %(message)s',
     filename = 'test.log',
     filemode = 'a+',
    )
    logging.debug('我是风啊')    #10
     logging.info('你是沙')     #20
    logging.warning('缠缠绵绵到我家')      #30
    logging.error('疯疯狂狂又一宿')    #40
    logging.critical('下不来床') #50

    自动挡:自己设定一个

    import logging
    logger = logging.getLogger('开发日志')  # 获取一个新的日志
    formatter = logging.Formatter('%(asctime)s - %(name)s - [%(lineno)d] - %(message)s')
    #定义了一个模板
    ch = logging.StreamHandler() # 流  屏幕流(打印到屏幕)
    #生成了一个屏幕流
    fh = logging.FileHandler('tt.log','a',encoding='utf-8')  #文件流
    # 生成一个文件流
    boss = logging.FileHandler('boss.log','a',encoding='utf-8')  #文件流
    # 生成一个老板看的日志
    boss_formatter = logging.Formatter('%(asctime)s - %(message)s')
    ch.setFormatter(formatter)
    # 把咱们定义的模板绑定给咱们的创建的存储日志的流
    fh.setFormatter(formatter)
    boss.setFormatter(boss_formatter)
    # 自己又写了一个新的模板,然后绑定
    logger.setLevel(logging.DEBUG)
    # 设置咱们日志的记录等级   用新创建的日志来调节记录的等级
    logger.addHandler(fh)
    # 指定要输出的方式 
    logger.addHandler(ch)
    #将屏幕流加入咱们的日志绑定
    logger.debug('我是风啊')    #10
    logger.info('你是沙')     #20
    logger.warning('缠缠绵绵到我家')      #30
    logger.error('疯疯狂狂又一宿')    #40
    logger.critical('下不来床') #50

    序列化:

    什么是序列化?

    原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

    json模块:

    dumps、dump、loads、load

    多个语言在通用
    
    序列号:
    dic = {'1':2,'2':3}
    dump  # 将对象转成字符存储到文件中
    load  # 将文件中的字符转换对象
    
    loads # 将字符串转换成对象
    dumps # 将对象转换字符串
    
    dic = {'name':'meet','age':18}
    lst = [1,3,45,67,88]
    
    f = open('test.txt','w',encoding='utf-8')
    json.dump(lst,f)
    
    f = open('test.txt','r',encoding='utf-8')
    s = json.load(f)
    print(type(s),s[-1])
    
    
    def func():
        print(111)
    
    lst = [1,2,3,[4,5,6]]
    s = json.dumps(lst)
    print(type(s),s)
    
    c = json.loads(s)
    print(type(c),c)
    
    import json
    data = {'username':['李华',[1,2,3],'二愣子'],'sex':'male','age':16}
    json_dic2 = json.dumps(data,sort_keys=True,ensure_ascii=False,indent=2,separators=(',',':'))
    print(json_dic2)

    pickle模块:

    import pickle
    
    load,dump
    loads dumps
    
    f = open('test.txt','wb')
    pickle.load(f)
    
    dic = {'1':2,'2':3}
    pickle.dump(dic,f)
    
    f1 = open('test.txt','rb')
    s = pickle.load(f1)
    print(type(s),s)
    
    dic = {'1':2,'2':3}
    s = pickle.dumps(dic) # 将对象转换成字节
    
    c = pickle.loads(s)
    print(type(c),c)
    
    def func():
        print(111)
    f1= pickle.dumps(func)
    
    i = 1234
    ff = pickle.dumps(i)
    print(ff)
    
    pickle.loads(f)()
    print(pickle.loads(f))

    总结:

    json: 序列化
    将一个对象转换成一个能够永久存储的内容
    将一个对象转换成一个字符串的时候 -- > 序列化 --> dumps(要转换的对象) -- >字符串
    将一个字符串转换成一个对象的时候 ---> 反序列化 --> loads(要转换的字符串) -->对象

    将一个对象转换成一个文件的时候 -- > 序列化 --> dump(要转换的对象,文件句柄) -- >可见文件
    将一个文件转换成一个对象的时候 ---> 反序列化 --> load(文件句柄) --> 对象

    pickle: 序列化
    将一个对象转换成一个能够永久存储的内容
    将一个对象转换成一个字节的时候 -- > 序列化 --> dumps(要转换的对象) -- >字节
    将一个字节转换成一个对象的时候 ---> 反序列化 --> loads(要转换的字节) -->对象

    将一个对象转换成一个文件的时候 -- > 序列化 --> dump(要转换的对象,文件句柄) -- >不可见文件
    将一个文件转换成一个对象的时候 ---> 反序列化 --> load(文件句柄) --> 对象

    区别:
    json 编程语言中是通用的,json转一些简单的数据
    pickle python自己的,可以将已知对象转换(lambda除外)

    random随机模块:

    import random
    print(chr(random.randrange(65,91)),
    chr(random.randrange(97,123)),
    chr(random.randrange(65,91)),
    chr(random.randrange(65,91)))
    
    print(chr(90))
    小数:
    print(random.random())      #0-1之间的小数
    print(random.uniform(1,5))  #1-5之间的小数
    
    print(random.randint(1,36))     # 随机整数
    print(random.randrange(1,10,2)) randrange()指定范围
    print(random.randrange(0,10,2))
    
    print(lst[random.randrange(len(lst))])
    print(random.choice(lst)) # choice(可迭代对象)  只拿一个
    print(random.choice(lst),random.choice(lst))
    print(random.choices(lst,k=2))  # 可以出现多个,但是容易重复
    print(random.sample(lst,k=3))   # 可以出现多个,不会出现重复
    
    lst = [12,3,4,5,6,7]
    random.shuffle(lst)  # 顺序打乱   洗牌
    print(lst)

  • 相关阅读:
    洛谷P3819 松江1843路
    洛谷P1896 [SCOI2005]互不侵犯King
    洛谷P1197 [JSOI2008]星球大战
    洛谷P1171 售货员的难题
    2017-10-24 NOIP模拟赛
    LibreOJ #6192. 「美团 CodeM 复赛」城市网络
    洛谷P2258 子矩阵
    Cogs 9. 中心台站建设
    Cogs 6. 线型网络
    洛谷P3138 [USACO16FEB]负载平衡Load Balancing_Silver
  • 原文地址:https://www.cnblogs.com/antigeneral/p/10277858.html
Copyright © 2020-2023  润新知