python笔记6

日志模块

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 afaa-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