一.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. 验证码(captcha)的由来

    如果您允许用户在您的网站上发表内容,如留下评论和创建用户配置文件,那么您可能会看到,垃圾留言散播者试图利用这些渠道来给他们自己的网站创造流量.在您的网站上出现这类垃圾留言,对任何人来说都不愉快.用户可 ...

  2. CF912E Prime Gift 数学

    Opposite to Grisha's nice behavior, Oleg, though he has an entire year at his disposal, didn't manag ...

  3. .net mvc 框架实现后台管理系统

    原文: https://www.cnblogs.com/ymnets/p/3424309.html -->底层实现 https://www.layui.com/ -->UI实现

  4. 第一册:lesson 125.

    原文: Tea for two. question:Does Susan have tea by herself? Can't you come in and have tea now Piter? ...

  5. 批处理中setlocal enabledelayedexpansion的含义

    setlocal enabledelayedexpansion       延迟变量全称"延迟环境变量扩展",要理解这个东西,我们还得先理解一下什么叫扩展!       CMD在解 ...

  6. Launch iCar Scan Android Scanner Support Bluetooth X431 iDiag Update Version

    Autonumen.com release new Launch iCar Scan for Android,Launch iCarScan Bluetooth Scanner is update v ...

  7. 23-----BBS论坛

    BBS论坛(二十三) 23.添加板块 (1)apps/models class BoardModel(db.Model): __tablename__ = 'board' id = db.Column ...

  8. 爬虫(GET)——爬取多页的html

    工具:python3 目标:将编写的代码封装,不同函数完成不同功能,爬取任意页数的html 新学语法:with open as 除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常. # ...

  9. Vue自定义指令实现按钮级权限控制功能

    思路: 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端会返回一个token,拿到token之后(我会将这个token存贮到sessionStorage中,保证刷新页面后能记住 ...

  10. 转 JDBC连接数据库(二)——连接池

    https://www.cnblogs.com/xiaotiaosi/p/6398371.html 数据库保持长连接,不过一直都是idle,除非有用户激活连接,这样后果是无法删除用户,但是不影响数据库 ...