Python之旅.第四章.模块与包.总结(未完待遇) (2)

logging模块模板

"""
logging配置
"""

#定义日志文件路径
#把日志路径赋予一个变量
LOG_PATH=r'a3.log'

# 定义三种日志输出格式 开始
#把自己定义的个数赋予一个变量用于后面的调用
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'


# log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
#多个日志格式,不可更改
'formatters': {
#日志格式名,可更改,这名字的意思是往终端打
'standard': {
#日志格式:上方定义的格式的变量名
'format': standard_format
},
#这个名字的意思是往文件打
'simple': {
'format': simple_format
},
},
#过滤,没什么用,可以无视
'filters': {},
#定义日志输出的格式:文件或终端,不可更改
'handlers': {
#打印到终端的日志名,可以更改
'console': {
#定义日志级别,不可更改:日志级别,可更改为DEBUG/INFO/WARNING/ERROT/CRITICAL
'level': 'DEBUG',
#定义日志输出格式,不可更改
'class': 'logging.StreamHandler', # 打印到屏幕
#绑定格式,不可更改:具体格式根据上方定义的格式更改
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
#日志写到哪个文件:变量名,此变量我们在上面以赋予路径
'filename': LOG_PATH, # 日志文件
#规定日志切分大小,以字节为单位
'maxBytes': 1024*1024*5, # 日志大小 5M
#规定日志切分后保存的日志次数
'backupCount': 5,
#日志文件编码
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
#产生日志,并且传的名字,名字空为默认
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
'': {
#把日志丢给谁,列表内存放的上上方定义的日志名
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
#设置级别,两层关卡,与上方级别相同即可
'level': 'DEBUG',
#向父级传递,通常关闭就可以了
'propagate': False, # 向上(更高level的logger)传递
},
},
}

import logging
import logging.config

#加载上方定义的字典
def get_logger(name):
#让logging模块从字典里加载配置
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
#拿到logging名,因为上面logging名为空,所以这里用__name__,如果上方定义了实名,就用上方定义的实名
logger = logging.getLogger(name) # 生成一个log实例
return logger # 记录该文件的运行状态
#用来测试是否在当前文件执行
if __name__ == '__main__':
get_logger()

 

什么是序列化:

我们把对象(变量)从内存中变成可储存或可传输的过程叫做序列化;

为什么要有序列化:

1.持久保存状态

2.跨平台数据交互

 

json模块

json只能处理字典,列表,字符串,数字,bool,空类型

json内都是双引号

序列化:内存中的数据结构——转成一种中间格式(字符串)——存储到文件中

关键字:json.dump()

用法:json.dump(需要序列化的值,打开文件的变量名)

反序列化:文件——读取中间格式(字符串)——转成内存中的数据结构

只用W写模式

关键字:json.load

用法:json.load(打开文件的变量名)

 

pickle模块

pickle可以转换所有的类型,但只能在python中使用

序列化:内存中的数据结构——转成一种中间格式(字符串)——存储到文件中

关键字:pickle.dump()

用法:pickle.dump(需要序列化的值,打开文件的变量名)

反序列化:文件——读取中间格式(字符串)——转成内存中的数据结构

只用W写模式

关键字:pickle.load

用法:pickle.load(打开文件的变量名)

 

os模块

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzgxx.html