一.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. POI2011 Tree Rotations

    POI2011 Tree Rotations 给定一个n<=2e5个叶子的二叉树,可以交换每个点的左右子树.要求前序遍历叶子的逆序对最少. 由于对于当前结点x,交换左右子树,对于范围之外的逆序对 ...

  2. LinkedList实现原理

    原文链接:https://www.jianshu.com/p/56c77c517e71 本文对LinkedList的实现讨论都基于JDK8版本 Java中的LinkedList类实现了List接口和D ...

  3. springboot jpa mongodb 整合mysql Field in required a bean of type that could not be found Failed to load ApplicationContext

    1.完整报错 *************************** APPLICATION FAILED TO START *************************** Descripti ...

  4. 2019.2.10考试T2, 多项式求exp+生成函数

    \(\color{#0066ff}{ 题目描述 }\) 为了减小文件大小,这里不写一堆题目背景了. 请写一个程序,输入一个数字N,输出N个点的森林的数量.点有标号. 森林是一种无向图,要求图中不能存在 ...

  5. 取消 windows2008 server 禁ping

    windows 2008 server 默认是禁ping的,取消方法如下: 依次打开: 服务器管理器——配置——高级安全windows防火墙——入站规则 找到“文件和打印机共享(回显请求-ICMPv4 ...

  6. 使用nexus 搭建本地 maven 服务器

    1.下载安装nexus oos https://www.sonatype.com/download-oss-sonatype ,选择2.x 版本. 2. 配置maven <server> ...

  7. 计算机学院大学生程序设计竞赛(2015’12)The collector’s puzzle

    Problem Description There is a collector who own many valuable jewels. He has a problem about how to ...

  8. Educational Codeforces Round 3 A

    A. USB Flash Drives time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. SQL全文搜索引擎 Sphinx

    Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索, 它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索.   Sphinx特别 ...

  10. spring boot 系统启动时运行代码(1)-@PostConstruct

    Application.java import org.springframework.boot.SpringApplication; import org.springframework.boot. ...