zoukankan      html  css  js  c++  java
  • 内建模块(二)

    一、logging模块
    二、序列化模块

    一、logging模块

    简化日志格式,实现日志打印,打印到屏幕,存储到文件中

    import logging
    #因为有等级区别,所以默认显示warning以及以上日志,以下等级由高到低降序排列
    logging.debug()
    logging.info()
    logging.warning()
    logging.error()
    logging.critical()
    

    日志配置格式配置有两种方式:config和logger对象

    1.connfig:只能将日志写入文件,不能同时打印到屏幕

    logging.basicConfig(level=logging.DEBUG, #默认等级
                        format='%(asctime)s [%(lineno)s] %(message)s', #显示内容
                        datefmt='%Y-%m-%d %H:%M:%S', #显示时间格式
                        filename='logger.log', #写入文件路径
                        filemode='a' #写入模式
                        )
    

    2.logger对象:默认追加写入,默认写入屏幕,可以同时输出到屏幕和文件

    import logging
    
    logger = logging.getLogger() #定义logger
    logger.setLevel(logging.DEBUG) #设置输出等级
    fm = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #设置格式
    
    #文件写入
    fh = logging.FileHandler('logger2.log') #输出到文件声明对象fh
    fh.setFormatter(fm) #fh对象获取格式
    logger.addHandler(fh) #给对象fh添加logger对象
    
    #屏幕写入
    sh = logging.StreamHandler() #输出到屏幕声明对象sh
    sh.setFormatter(fm) #sh对象获取格式
    logger.addHandler(sh) #给对象sh添加logger对象
    

    举例,可以封装到函数直接调用:

    import logging
    def get_logger():
        logger = logging.getLogger()  # 定义logger
        logger.setLevel(logging.DEBUG)  # 设置输出等级
        fm = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  # 设置格式
    
        # 文件写入
        fh = logging.FileHandler('logger2.log')  # 输出到文件声明对象fh
        fh.setFormatter(fm)  # fh对象获取格式
        logger.addHandler(fh)  # 给对象fh添加logger对象
    
        # 屏幕写入
        sh = logging.StreamHandler()  # 输出到屏幕声明对象sh
        sh.setFormatter(fm)  # sh对象获取格式
        logger.addHandler(sh)  # 给对象sh添加logger对象
        return logger
    
    a = get_logger()
    
    a.debug('debug..')
    a.info('info..')
    a.warning('warning..')
    a.error('error..')
    a.critical('critical..')
    

    二、序列化模块

    json序列化
    通过键值对,实现不同平台的数据交换

    1.json模块

    1. 只有两个方法:序列化和反序列化
    2. 只要格式符合json格式,就和可以losds出来
    3. json不可以转换时间类型格式,datetime.datetime

    json不识别元组格式

    json.dumps(1)
    json.dumps('hello')
    a = json.dumps((1,2,3))
    json.dumps([1,234,4])
    json.dumps({'name':'ale'})
    
    print(json.dumps((1,2,3)))
    print(json.loads(a))
    

    序列化和反序列化的转换:json.dumps和json.loads

    # d = {'河北':['保定','廊坊']}
    d = {"hebei":['baoding','langfang']}
    
    # 序列化、反序列化
    
    s= json.dumps(d) #将字典d转换为json字符串 --序列化过程
    
    f = open('new','w')
    f.write(s)
    f.close()
    f = open('new')
    date = f.read()
    f.close()
    
    date2 = json.loads(date) #--反序列化
    
    #简化以上方式:dump
    
    f = open('new2','w')
    json.dump(d, f) #转化为json字符串,然后将字符串写入文件
    f.close()
    
    

    2.pickle模块

    1. 用于python间的数据交换,适用于python的任意数据类型
    2. pickle写入文件后,无法直接打开文件阅读
    3. pickle可以转换时间类型格式,datetime.datetime

    序列化和反序列化的转换:pickle.dumps和pickle.loads

    import pickle
    import datetime
    
    t = datetime.datetime.now() 
    d = {'date':t} #带有时间格式的字典
    
    #序列化、反序列化
    
    s = pickle.dumps(d) #将字典转化为picle字符串---序列化
    
    f = open('new5','wb')
    f.write(s)
    f.close()
    f = open('new5','rb')
    date = f.read() 
    f.close()
    
    date2 = pickle.loads(date) #---反序列化
    
    #简化以上方式:dump
    
    f = open('new4','wb')
    pickle.dump(d, f) #---序列化
    f.close()
    
    f = open('new4','rb')
    print(pickle.load(f)) #---反序列化
    f.close()
    
    
  • 相关阅读:
    vue3.0基本使用
    node 版本升级
    Steam游戏《Northgard(北境之地)》修改器制作
    万能WEB弹出框,js随意适配
    数据湖了解
    操作系统(一)
    无题
    基于林业害虫识别系统的缺陷分析
    美化Android下拉刷新
    软件测试
  • 原文地址:https://www.cnblogs.com/sunqim16/p/6776271.html
Copyright © 2011-2022 走看看