内建模块(二)

一、logging模块
二、序列化模块

一、logging模块

简化日志格式,实现日志打印,打印到屏幕,存储到文件中

import logging
#因为有等级区别,所以默认显示warning以及以上日志,以下等级由高到低降序排列
logging.debug()
logging.info()
logging.warning()
logging.error()
logging.critical()

日志配置格式配置有两种方式:config和logger对象

1.connfig:只能将日志写入文件,不能同时打印到屏幕

logging.basicConfig(level=logging.DEBUG, #默认等级
                    format='%(asctime)s [%(lineno)s] %(message)s', #显示内容
                    datefmt='%Y-%m-%d %H:%M:%S', #显示时间格式
                    filename='logger.log', #写入文件路径
                    filemode='a' #写入模式
                    )

2.logger对象:默认追加写入,默认写入屏幕,可以同时输出到屏幕和文件

import logging

logger = logging.getLogger() #定义logger
logger.setLevel(logging.DEBUG) #设置输出等级
fm = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #设置格式

#文件写入
fh = logging.FileHandler('logger2.log') #输出到文件声明对象fh
fh.setFormatter(fm) #fh对象获取格式
logger.addHandler(fh) #给对象fh添加logger对象

#屏幕写入
sh = logging.StreamHandler() #输出到屏幕声明对象sh
sh.setFormatter(fm) #sh对象获取格式
logger.addHandler(sh) #给对象sh添加logger对象

举例,可以封装到函数直接调用:

import logging
def get_logger():
    logger = logging.getLogger()  # 定义logger
    logger.setLevel(logging.DEBUG)  # 设置输出等级
    fm = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  # 设置格式

    # 文件写入
    fh = logging.FileHandler('logger2.log')  # 输出到文件声明对象fh
    fh.setFormatter(fm)  # fh对象获取格式
    logger.addHandler(fh)  # 给对象fh添加logger对象

    # 屏幕写入
    sh = logging.StreamHandler()  # 输出到屏幕声明对象sh
    sh.setFormatter(fm)  # sh对象获取格式
    logger.addHandler(sh)  # 给对象sh添加logger对象
    return logger

a = get_logger()

a.debug('debug..')
a.info('info..')
a.warning('warning..')
a.error('error..')
a.critical('critical..')

二、序列化模块

json序列化
通过键值对,实现不同平台的数据交换

1.json模块

  1. 只有两个方法:序列化和反序列化
  2. 只要格式符合json格式,就和可以losds出来
  3. json不可以转换时间类型格式,datetime.datetime

json不识别元组格式

json.dumps(1)
json.dumps('hello')
a = json.dumps((1,2,3))
json.dumps([1,234,4])
json.dumps({'name':'ale'})

print(json.dumps((1,2,3)))
print(json.loads(a))

序列化和反序列化的转换:json.dumps和json.loads

# d = {'河北':['保定','廊坊']}
d = {"hebei":['baoding','langfang']}

# 序列化、反序列化

s= json.dumps(d) #将字典d转换为json字符串 --序列化过程

f = open('new','w')
f.write(s)
f.close()
f = open('new')
date = f.read()
f.close()

date2 = json.loads(date) #--反序列化

#简化以上方式:dump

f = open('new2','w')
json.dump(d, f) #转化为json字符串,然后将字符串写入文件
f.close()

2.pickle模块

  1. 用于python间的数据交换,适用于python的任意数据类型
  2. pickle写入文件后,无法直接打开文件阅读
  3. pickle可以转换时间类型格式,datetime.datetime

序列化和反序列化的转换:pickle.dumps和pickle.loads

import pickle
import datetime

t = datetime.datetime.now() 
d = {'date':t} #带有时间格式的字典

#序列化、反序列化

s = pickle.dumps(d) #将字典转化为picle字符串---序列化

f = open('new5','wb')
f.write(s)
f.close()
f = open('new5','rb')
date = f.read() 
f.close()

date2 = pickle.loads(date) #---反序列化

#简化以上方式:dump

f = open('new4','wb')
pickle.dump(d, f) #---序列化
f.close()

f = open('new4','rb')
print(pickle.load(f)) #---反序列化
f.close()

原文地址:https://www.cnblogs.com/sunqim16/p/6776271.html