日志模块
1 logger对象 用来产生日志
logger1 = logging.getLogger("银行业务相关")
日志名是用来区分记录的日志相关信息
2 filter对象 用来过滤日志
3 formmatter对象 定制日志的格式
4 handler对象 控制日志的去向 1 文件 2终端
fh1 = logging.FileHandler("a1.log","encoding=utf-8")
ch = logging.StreamHandler()
##建立logger对象与handler的绑定对象
logger1.addHandler(fh1)
logger1.addHandler(ch)
#format 对象,定制日志的格式
formatter1 = logging.Formatter(
fmt = ""
datefmt =
)
为handler对象绑定日志格式
fh1.setFormatter(formatter)
## d设置日志级别‘
1 logger
2 handler 只有2层控制,最终日志才会进入对象
logger.setLevel(10)
##格式
import os
LOGGING = {
‘version‘: 1,
‘disable_existing_loggers‘: True,
‘formatters‘: {
‘lqm_format‘: {
‘format‘: ‘%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s‘
},
‘simple‘: {
‘format‘: ‘%(levelname)s %(message)s‘
},
},
‘filters‘: {
},
‘handlers‘: {
‘system‘: {
‘class‘: ‘logging.handlers.TimedRotatingFileHandler‘,
## ‘filename‘: os.getenv(‘LOGS_path‘, ‘logs‘) + "/" + "system.log",
‘filename‘: os.path.join(os.getenv(‘LOGS_path‘, ‘logs‘) ,"system.log"),
‘formatter‘: ‘lqm_format‘,
‘when‘: ‘midnight‘,
‘interval‘: 1,
‘backupCount‘: 30,
},
‘user‘: {
‘class‘: ‘logging.handlers.TimedRotatingFileHandler‘,
‘filename‘: os.getenv(‘LOGS_path‘, ‘logs‘) + "/" + "user.log",
‘formatter‘: ‘lqm_format‘,
‘when‘: ‘midnight‘,
‘interval‘: 1,
‘backupCount‘: 30,
},
},
‘loggers‘: {
‘user‘: {
‘handlers‘: [‘user‘, ],
‘level‘: os.getenv(‘LOGS_level‘, ‘DEBUG‘),
‘propagate‘: True,
},
‘system‘: {
‘handlers‘: [‘system‘, ],
‘level‘: os.getenv(‘LOGS_level‘, ‘DEBUG‘),
‘propagate‘: True,
},
}
}
二 序列 化
json
只能支持部分python的数据类型,所语言类型都支持有
pickle
只有python支持,包含所有python的类型
dic = {‘name‘:"esz"}
with open("user.json",w) as f:
##等于将dic的文件,给写入f中
json.dump(dic,f)
## 独处f的数据并放入dict中
dic = json.load(f)
1 import pickle
2
3 dic={‘name‘:‘alvin‘,‘age‘:23,‘sex‘:‘male‘}
4
5 print(type(dic))#<class ‘dict‘>
6
7 j=pickle.dumps(dic)
8 print(type(j))#<class ‘bytes‘>
9
10
11 f=open(‘序列化对象_pickle‘,‘wb‘)#注意是w是写入str,wb是写入bytes,j是‘bytes‘
12 f.write(j) #-------------------等价于pickle.dump(dic,f)
13
14 f.close()
15 #-------------------------反序列化
16 import pickle
17 f=open(‘序列化对象_pickle‘,‘rb‘)
18
19 data=pickle.loads(f.read())# 等价于data=pickle.load(f)
20
21
22 print(data[‘age‘])
三 hash模块
hash 1 校验文本内容
2 hash 固定
3 明文转密码进行传输
m = hashlib.md5()
m.update(b"hello") 这个等于 m.update("hello".encode("utf-8"))
m.update(b"ss")
m.hexdigest() 获取到密文密码
import hmac
m = hmac.new(‘sss‘.encode("utf-8"))
m1=hashlib.sha256()
m1.update(‘hello‘.encode(‘utf-8‘))
print(m1.hexdigest())
m2=hashlib.sha512()
m2.update(‘hello‘.encode(‘utf-8‘))
print(m2.hexdigest())
四 re 模块
正则 用一堆特殊符号组成的规则去一个文本/字符串匹配符号规则的内容
re.findall("\w",str)
重复匹配 。 ? * + {m,n}
print(re.findall)
import re
换行 不匹配
print(re.findall("a.c","123131asc,ssfafaa-c"))
就算换行也匹配
print(re.findall("a.c","123131asc,ssf\nafaa-c",re.DOTALL))
? 匹配0个或者一个 ,有必须匹配,如果没有也可以
print(re.findall(‘ab?‘,"aa ssafsfaabbssa"))
* 匹配0个或者无穷个
+ 匹配一个或者无穷个
{n,m}
print(re.findall(‘\d+.?\d+‘))
.* 贪婪匹配,选择最多的值
print(re.findall("a.*c",‘assfafasfcssssfafsfsf111223c‘))
匹配到 assfafasfcssssfafsfsf111223c
.? 非贪婪匹配,匹配早少的复合的值
print(re.findall("a.
c",‘assfafasfcssssfafsfsf111223c‘))
匹配到 asfc
分组 ()与 ! conpan(ies|y) 可以取匹配 ies 与 y
conpan(?ies|y) 可以匹配到 conpanies 和conpany
print(re.findall(‘href="(.?)"‘,‘点击‘))#[‘http://www.baidu.com‘]
print(re.findall(‘href="(?:.?)"‘,‘点击‘))#[‘href="http://www.baidu.com"‘]
[] 匹配的也是一个字符,但这个字符必须是[]内定义的
print(re.findall(‘a[a-zA-Z]c‘,"abcsacadcaoc"))
rex = ‘a[+-*/]‘ ##去匹配+,- *,/
print(re.findall(‘e‘,‘alex make love‘) )
原文地址:https://www.cnblogs.com/liuqimin/p/9033667.html