標籤:一個 user 定義 密碼 date for mod 等於 asc
日誌模組
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 hmacm = 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 與 yconpan(?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‘) )
python筆記6