内建模块(二)
一、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模块
- 只有两个方法:序列化和反序列化
- 只要格式符合json格式,就和可以losds出来
- 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模块
- 用于python间的数据交换,适用于python的任意数据类型
- pickle写入文件后,无法直接打开文件阅读
- 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()