1. 程式人生 > >logging日誌模組,re正則表示式模組,hashlib hash演算法相關的庫,

logging日誌模組,re正則表示式模組,hashlib hash演算法相關的庫,

logging:
功能完善的日誌模組
import logging

#日誌的級別
logging.debug("這是個除錯資訊")#級別10
#常規資訊
logging.info("常規資訊")#20
#警告資訊
logging.warning("警告資訊")#30
#錯誤資訊
logging.error("錯誤資訊")#40
#嚴重錯誤
logging.critical("嚴重錯誤")#50
#在logging模組中有對應的常量來標識級別
#在預設情況下 預設的級別 30 WARING 日誌輸出位置是控制檯

#2.自定義日誌的配置
logging.basicConfig(
filename="a.log",
filemode="at",
level=10,
format="%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p"
)
logging.debug("這是個錯誤資訊")

#日誌模組的四個核心角色
'''
1.logger 日誌生成器(生成後需要看一下級別 當前生成級別比設定的級別低 就不往下進行了)
2.filter 過濾器(根據指定的過濾邏輯進行過濾)->不常用
3.handler 處理器(按照formatter指定的格式輸出)
4.formatter 格式處理器 控制輸出格式

'''
#1.建立一個日誌生成器
mylog=logging.getLogger("mylog")
#設定生成器級別
mylog.setLevel(logging.DEBUG)
#2.搞一個日誌處理器
fh=logging.FileHandler("b.log",encoding="utf-8")
#3.搞一個格式處理器
fm=logging.Formatter("%(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p")
#4.將三個物件進行關聯
mylog.addHandler(fh)
fh.setFormatter(fm)
#測試
mylog.debug("mylog 的 測試4")

#日誌的繼承
logg1=logging.getLogger("father")
logg2=logging.getLogger("father.son")
logg3=logging.getLogger("father.son.grandson")
#預設值Ture 標識 有繼承關係 當子日記產生日誌時候 給它的父級及上級都發一份
logg3.propagate=False
fh=logging.FileHandler("b.log",encoding="utf-8")
fm=logging.Formatter("%(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p")
logg1.addHandler(fh)
logg2.addHandler(fh)
logg3.addHandler(fh)
fh.setFormatter(fm)
logg2.warning("father.son.log")
import logging.config
#以字典來配置日誌 傳入一個字典物件 就不需要再在上面編寫一堆程式碼了
logging.config.dictConfig()

#流處理器
log1=logging.getLogger("a")
#輸出到檔案
fh=logging.FileHandler("c.log",encoding="utf-8")
#輸出到控制檯
sh=logging.StreamHandler()

log1.addHandler(sh)
fm=logging.Formatter("%(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p")
sh.setFormatter(fm)
log1.waring("測試!")


import conf.settings
import logging.config
def log():
logging.config.dictConfig(conf.settings.LOGGING_DIC)
loger=logging.getLogger("mylog")
loger.warning("警告!")








re:

正則表示式模組
主要處理字串
匹配 查詢 搜尋
給你一個字串 要從中找到你需要的東西 爬蟲大量使用
"""
re 是Regular Expression的簡稱表示正則表示式
RE regex
什麼是正則表示式 :一堆帶有特殊意義的符號組成的式子
它的作用 處理(匹配 查詢 替換)字串
1.在爬蟲中大量使用 其實有框架幫你封裝了這些複雜的正則
2.在網站和手機app的註冊功能中大量使用 例如判斷你的郵箱地址是否正確
"""
import re
print(re.findall("\w","1。ab,e《g——g_g"))#匹配數字字母下劃線
print(re.findall("\W","*;56。.,"))#匹配非數字字母下劃線
print(re.findall("\s","\n\t\r\f"))#匹配任意空白字元
print(re.findall("\S","\n\t\r\f"))#匹配任意非空白字元
print(re.findall("\d","123**"))#匹配任意的數字
print(re.findall("\D","123**"))#匹配任意的非數字
print(re.findall("\A\d","123*\nbc"))#從字串開始處匹配
print(re.findall("\d\Z","123abc*9\n"))#從字串結束處匹配 注意把\Z寫在表示式右邊
print(re.findall("\d$","123*39"))#匹配字串尾部
print(re.findall("\n","\n9999n"))#匹配\n
print(re.findall("\t","\n999\t9n"))#匹配\t
print(re.findall("^\d","1\n9999n"))#從字元開始匹配數字

#======================================= 範圍匹配 ===============================================

print(re.findall("[abc]","AaBbc"))#匹配a-c
print(re.findall("[^abc]","AaBbc"))#匹配非a-c
print(re.findall("[0-7]","A8953aBbc"))#匹配數字0-7
print(re.findall("[A-z]","AaBbc"))#匹配A-z













hashlib:

hash演算法相關的庫
演算法怎麼算不需要關心
我們關心的重點是 算出來的結果有什麼用

"""
hash lib
hash 是一種演算法 是將一個任意長度的資料 根據計算 得到一個固定長度特徵碼
特徵:不同輸入 可能會有相同的結果(機率比較小)
相同的輸入 必然得到相同結果
由於雜湊(特徵)的性質 從原理來看是不可能反解
1 . 用來驗證兩個輸入的資料是否一致
密碼驗證:
123321 jahsaishajhsjahjas
chient 加密後結果 server 拿到加密後
2 . 驗證資料是否被篡改 比如遊戲安裝包 有沒有被改過
為了防止別人撞庫 可以用update進行加嚴處理

"""
# 撞庫破解的原理 有人事先把常見的明文和密文的對應關係 存到資料庫
#運氣好可以查到

import hashlib
m=hashlib.md5("1yanhui23".encode("utf-8"))
print(m.hexdigest())
#加嚴
m.update("dsdfgsfzds".encode("utf-8"))
print(m.hexdigest())
#定義時直接加嚴
import hmac
h=hmac.new("dsdfgsfzds".encode("utf-8"))
h.update("123".encode("utf-8"))
print(h.hexdigest())