一.json与pickle

  json与pickle模块是为了完成数据的序列化.

  序列化是指把对象(变量)从内存中变成可存储或传输的过程,在Python中叫picking,在其他语言中也由其他的叫法,但是都是一个意思

  序列化是为了解决数据持久保存状态和跨平台数据交互两个问题,

  如何实现序列化?

  json

  JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

  如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,最好的方法是序列化为json,因为json表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输,json不仅是标准格式,平且比XML更快,而且可以直接在Web页面读取,非常方便

  由于json表示的对象就是标准的JavaScript语言的对象,json和python内置的数据类型如下:

  

  pickle

  pickle和json一样是为了实现序列化的模块,但是pickle的问题是只能在python中使用,python中几乎所有的数据类型都可以用pickle来序列化,但是pickle序列化后的数据可读性差,人一般无法识别.

  pickle.dump(obj, file[, protocol])
  序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。

  pickle.load(file)
  反序列化对象。将文件中的数据解析为一个Python对象。其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错:

二.logging模块

  1.日志相关概念

  日志是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描述。此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level)。

  日志是为了使我们通过记录和分析日志可以了解一个系统或软件程序运行情况是否正常,也可以在应用程序出现故障时快速定位问题.

  2.日志的级别

    CRITICAL = 50

    ERROR = 40

    WARNING = 30

    INFO = 20

    DEBUG = 10

    NOTSET = 0

  默认级别为warning

  代码实例:

    

  执行结果:

    

  3.logging模块的使用

    logging模块定义的模块级别的常用函数:

     logging.debug(msg,*args,**kwargs)      创建一条级别为DEBUG的日志记录

     logging.info(msg,*args,**kwargs)          创建一条级别为INFO的日志记录

logging.warning(msg,*args,**kwargs)    创建一条级别为WARNING的日志记录

logging.error(msg,*args,**kwargs)        创建一条级别为ERROR的日志记录

logging.critical(msg,*args,**kwargs)      创建一条级别为CRITICAL的日志记录

logging.log(level,*args,**kwargs)          创建一条级别为level的日志记录

logging.basicConfig(**kwargs)              对root logger进行一次性配置

4.logging模块的Formatter,Handler,Logger,Filter对象

  logger:产生日志的对象
  Filter:过滤日志的对象
  Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端
  Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式

  logger是第一级过滤,然后才能到handler,我们可以给logger和handler同时设置level

  logging配置,代码实例:

  LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
      'standard': {
        'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
          '[%(levelname)s][%(message)s]'
      },
      'simple': {
        'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
      },
      'collect': {
        'format': '%(message)s'
      }
    },
    'filters': {
      'require_debug_true': {
        '()': 'django.utils.log.RequireDebugTrue',
      },
    },
    'handlers': {
      #打印到终端的日志
      'console': {
        'level': 'DEBUG',
        'filters': ['require_debug_true'],
        'class': 'logging.StreamHandler',
        'formatter': 'simple'
      },
      #打印到文件的日志,收集info及以上的日志
      'default': {
        'level': 'INFO',
        'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
        'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件
        'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
        'backupCount': 3,
        'formatter': 'standard',
        'encoding': 'utf-8',
      },
      #打印到文件的日志:收集错误及以上的日志
      'error': {
        'level': 'ERROR',
        'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
        'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"), # 日志文件
        'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
        'backupCount': 5,
        'formatter': 'standard',
        'encoding': 'utf-8',
      },
      #打印到文件的日志
      'collect': {
        'level': 'INFO',
        'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
        'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
        'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
        'backupCount': 5,
        'formatter': 'collect',
        'encoding': "utf-8"
      }
    },
    'loggers': {
      #logging.getLogger(__name__)拿到的logger配置
      '': {
        'handlers': ['default', 'console', 'error'],
        'level': 'DEBUG',
        'propagate': True,
      },
      #logging.getLogger('collect')拿到的logger配置
      'collect': {
        'handlers': ['console', 'collect'],
        'level': 'INFO',
      }
    },
  }

Python常用模块(二)的更多相关文章

  1. Python常用模块二

    一.time & datetime #_*_coding:utf-8_*_ import time # print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了t ...

  2. python:常用模块二

    1,hashlib模块---摘要算法 import hashlib md5 = hashlib.md5() md5.update('how to use md5 in python hashlib?' ...

  3. python常用模块二正则表达式

    正则表达式 常用的正则元字符 # =================================匹配模式================================= #一对一的匹配 # 'h ...

  4. python——常用模块

    python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的 ...

  5. python常用模块之subprocess

    python常用模块之subprocess python2有个模块commands,执行命令的模块,在python3中已经废弃,使用subprocess模块来替代commands. 介绍一下:comm ...

  6. python常用模块-调用系统命令模块(subprocess)

    python常用模块-调用系统命令模块(subprocess) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. subproces基本上就是为了取代os.system和os.spaw ...

  7. python常用模块-配置文档模块(configparser)

    python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ConfigParser模块用于生成和修改常见配置文档,当前模块的名称 ...

  8. Python常用模块-摘要算法(hashlib)

    Python常用模块-摘要算法(hashlib) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MD5算法参数详解 1.十六进制md5算法摘要 #!/usr/bin/env p ...

  9. Python常用模块-随机数模块(random)

    Python常用模块-随机数模块(random) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用方法举例 #!/usr/bin/env python #_*_coding: ...

随机推荐

  1. 【51Nod 1363】最小公倍数之和(欧拉函数)

    题面 传送门 题解 拿到式子的第一步就是推倒 \[ \begin{align} \sum_{i=1}^nlcm(n,i) &=\sum_{i=1}^n\frac{in}{\gcd(i,n)}\ ...

  2. BZOJ 3028: 食物

    \(\color{#0066ff}{ 题目描述 }\) 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应 该带一些什么东西.理所当然的,你当然要帮 ...

  3. P5056 【模板】插头dp

    \(\color{#0066ff}{ 题目描述 }\) 给出n*m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法? \(\color{#0066ff}{输入格式}\) 第1 ...

  4. SIGHUP信号

    SIGHUP会在以下3种情况下被发送给相应的进程:1.终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程)2.session首进程退出时,该信号被 ...

  5. [HNOI2004]宠物收养场 BZOJ1208 splay tree

    题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...

  6. 黑马学习CSS选择器 简单选择器 结合符 选择器组合 选择器优先级

  7. spring自定义 xsd 位置

    与元素类型 "beans" 相关联的属性 "xsi:schemaLocation" 的前缀 "xsi" 未绑定. 解决办法:(绿色字体) & ...

  8. AJAX使用说明书 基础

    AJAX简介 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异 ...

  9. java拦截器的使用

    转载: https://www.cnblogs.com/liangblog/p/7234757.html https://blog.csdn.net/reggergdsg/article/detail ...

  10. 读书印记 - 《文革前的邓小平:毛XX的副帅》

    开始看才发现这居然是本学术著作,阅读难度系数比小说.传记要很多,相比于小说的人物心理.传记的故事套路,这本书的基本写法是举一大坨材料来描述当时的事实然后稍微发表一点学术观点.....我对这个内容本身挺 ...