一.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. SQLAlchemy外键的使用

    orm可以将数据库存储的数据封装成对象,同时,如果封装的好的话,所有的数据库操作都可以封装到对象中.这样的代码在组织结构上会非常的清晰,并且相对与使用sql语句在sql注入方面会极具降低. SQLAl ...

  2. JS字符串替换(jQuery)

    ①自己封装的一个方法String.format String.format = function() { var s = arguments[0]; for (var i = 0; i < ar ...

  3. 字符串格式化str.format

    一.字符串格式化之str.format 1.位置参数:用{0},{1},{2}表示位置 v1 = '{1},{0},{1}'.format('a','b') #输出b,a,b 2.关键词参数:用{na ...

  4. csv HTTP简单表服务器

    HTTP Simple Table Server Download Performance testing with JMeter can be done with several JMeter in ...

  5. 项目笔记《DeepLung:Deep 3D Dual Path Nets for Automated Pulmonary Nodule Detection and Classification》(三)(上)结果评估

    在(一)中,我将肺结节检测项目总结为三阶段,这里我要讲讲这个项目的第三阶段,至于第二阶段,由于数据增强部分的代码我始终看不大懂,先不讲. 结果评估的程序在evaluationScript文件夹下,这个 ...

  6. H5切换至后台页面

    先说重点,试了很多种方法,这个真实有效 var reLoadLeftTime = false ;//监听浏览器当前页面是否被激活的事件var hiddenProperty = 'hidden' in ...

  7. java编程技巧和心得

    1.在一个类中修改或调用另一个类的变量: 只需要将该变量用public static 这个修饰符修饰,再用类名直接调用即可 2.实现对只有下标不同变量的操作 解决思路:可以将这些变量放在一个数组里,在 ...

  8. Linq,拉姆达表达式注意!

    linq的条件语句尽量不要出现计算的式子,要不然很可能,程序不能正确的将这些复杂的式子编译成表达式!! 例如: dataContext.Assets.Count(s => s.SubCatego ...

  9. Avito Cool Challenge 2018:D. Maximum Distance

    D. Maximum Distance 题目链接:https://codeforces.com/contest/1081/problem/D 题意: 给出一个连通图以及一些特殊点,现在定义cost(u ...

  10. 关于string 的简单应用

    声明||作用 string类本不是STL的容器,但是它与STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍. 之所以抛弃char*的字符串而选用C++标准程序库中的string类, ...