一.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. Dynamic Rankings(整体二分)

    Dynamic Rankings(整体二分) 带修区间第k小.\(n,q\le 10^4\). 这次我们旧瓶装新酒,不用带修主席树.我们用整体二分!整体二分是啥东西呢? 二分答案可以解决一次询问的问题 ...

  2. ubuntu14.04 搭建samba

        1.安装软件      sudo apt-get remove libwbclient0      sudo apt-get remove samba-common      sudo apt ...

  3. 利用zookeeper生成唯一id,通用性代码

    在上篇中是写死的,这章就写出通用的 package com.cxy.com.cxy.curator; import java.util.concurrent.ExecutorService; impo ...

  4. Git 的简单测试

    Git 简介 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开 ...

  5. ie7,ie8 js中变量名和页面元素ID重名,报错

    js变量名和一个div的id重名,报错.不知所以然...做个标记

  6. C#工具类之Xml序列化扩展类

    using System; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.T ...

  7. php内置web server

    今天刚开始正式学习PHP(之前有一点了解),推荐学习的网站是w3school.一开始不知道tomcat服务器不支持PHP脚本,直接把.php文件放到tomcat里面去运行,结果嵌入的php代码段没有什 ...

  8. 两个数据库通过DataTable实现差异传输

    两个主要方法 /// <summary>/// 用途:/// 用源表和目标表比较,返回差异的数据(目标表为参照物)/// /// 逻辑:/// 1.合并两个表/// 2.循环合并后得到的表 ...

  9. oracle service name connect

    oracle service name connect dest_ip=100.100.100.100 dest_port= dest_dbname=server_name connect=" ...

  10. thinkphp控制器的使用

    控制器的使用 2.1url如何调用控制器 以典型的URL为例  http://localhost/shop/index.php/home/index/test /*home/controller/in ...