zoukankan      html  css  js  c++  java
  • python基础-------模块与包(二)

    sys模块、logging模块、序列化

    一、sys模块

    sys.argv           命令行参数List,第一个元素是程序本身路径
    sys.exit(n)        退出程序,正常退出时exit(0)
    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    这几个为常用的sys模块!
     

    二、logging模块

    logging模块为方便记录程序日志的模块!
     
    import logging 
    logging.debug('debug message') 
    logging.info('info message') 
    logging.warning('warning message') 
    logging.error('error message') 
    logging.critical('critical message')

     
    默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。
     
    灵活配置日志级别,日志格式,输出位置:
     
    import logging 
    logging.basicConfig(level=logging.DEBUG, 
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', 
                        datefmt='%a, %d %b %Y %H:%M:%S', 
                        filename='/tmp/test.log', 
                        filemode='w') 
     
    logging.debug('debug message') 
    logging.info('info message') 
    logging.warning('warning message') 
    logging.error('error message') 
    logging.critical('critical message')
     
     logger对象配置(主要)
     
    import logging

    logger = logging.getLogger()
    # 创建一个handler,用于写入日志文件
    fh = logging.FileHandler('test.log')

    # 再创建一个handler,用于输出到控制台
    ch = logging.StreamHandler()

    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    fh.setFormatter(formatter)
    ch.setFormatter(formatter)

    logger.addHandler(fh) #logger对象可以添加多个fh和ch对象logger.addHandler(ch)

    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')
     
    logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过:logger.setLevel(logging.Debug)设置级别。
     
     

    三、序列化模块

     
    序列化的概念:
    我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
     
     
    json模块
    如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
    JSON表示的对象就是标准的JavaScript语言的对象一个子集,JSON和Python内置的数据类型对应如下:
     
    json模块序列化与反序列化
    import json

    dic={'name':'alvin','age':23,'sex':'male'}
    print(type(dic))#<class 'dict'>
    data=json.dumps(dic)
    print("type",type(data))#<class 'str'>print("data",data)


    f=open('序列化对象','w')
    f.write(data)  #-------------------等价于json.dump(dic,f)f.close()


    #-----------------------------反序列化<br>import json
    f=open('序列化对象')
    new_data=json.loads(f.read())#  等价于data=json.load(f)

    print(type(new_data))
     
     
    pickle模块的序列化与反序列化(只是Python内部的数据转换)
    ##----------------------------序列化
    import pickle

    dic={'name':'alvin','age':23,'sex':'male'}
     
    print(type(dic))#<class 'dict'> 
    j=pickle.dumps(dic)
    print(type(j))#<class 'bytes'> 
     
    f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes'
    f.write(j)  #-------------------等价于pickle.dump(dic,f) 
    f.close()
    #-------------------------反序列化import pickle
    f=open('序列化对象_pickle','rb')
     
    data=pickle.loads(f.read())#  等价于data=pickle.load(f)
     
    print(data['age']) 
  • 相关阅读:
    Socket网络编程--简单Web服务器(4)
    GCC学习笔记
    字符分隔符'1'(u0001)的困惑
    g++编译时遇到问题undefined reference to
    ROS学习笔记(三)
    cJSON笔记
    ROS学习笔记(二)
    ROS学习笔记(一)
    ffmpeg推流方式采用TCP协议
    Android OS的image文件组成
  • 原文地址:https://www.cnblogs.com/niubin/p/7067419.html
Copyright © 2011-2022 走看看