hashlib模組
hashlib提供了常見的摘要演算法,如md5和sha1等等。
那麼什麼是摘要演算法呢?摘要演算法又稱為雜湊演算法、雜湊演算法。它通過一個函式,把任意長度的資料轉換為一個長度固定的資料串(通常用16進位制的字串表示)。
注意:摘要演算法不是一個解密演算法。(摘要演算法,檢測一個字串是否發生了變化)
應用:1.做檔案校驗
2.登入密碼
密碼不能解密,但可以撞庫,用‘加鹽’的方法就可以解決撞庫的問題。所有以後設定密碼的時候要設定的複雜一點。
import hashlib
# md5_obj = hashlib.md5() 未加鹽
md5_obj = hashlib.md5(`luffy`.encode(`utf-8`)) #加鹽後(就讓你的密碼更牢固了)
md5_obj.update(`123456`.encode(`utf-8`))
print(md5_obj.hexdigest())
md5_obj.update(`hello`.encode(`utf-8`))
print(md5_obj.hexdigest())
# -----------
user = `zorro`
password = `123456`
md5_obj= hashlib.md5(user.encode(`utf-8`)) #加鹽(哪怕別人的密碼和你的密碼一樣,
# 那你加鹽以後就只有你的使用者名稱對應的是你的密碼了)
md5_obj.update(password.encode(`utf-8`))
print(md5_obj.hexdigest())
import hashlib
md5_obj = hashlib.md5()
import os
filesize = os.path.getsize(`filename`) #檔案大小
f = open(`filename`,`rb`)
while filesize>0:
if filesize > 1024:
content = f.read(1024)
filesize -= 1024
else:
content = f.read(filesize)
filesize -= filesize
md5_obj.update(content)
# for line in f:
# md5_obj.update(line.encode(`utf-8`))
md5_obj.hexdigest()
# 檔案校驗(檢測檔案改變了沒)
logging模組
1. 日誌級別
日誌一共分成5個等級,從低到高分別是:
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
說明:
- DEBUG:詳細的資訊,通常只出現在診斷問題上
- INFO:確認一切按預期執行
- WARNING:一個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。磁碟空間低”)。這個軟體還能按預期工作。
- ERROR:更嚴重的問題,軟體沒能執行一些功能
- CRITICAL:一個嚴重的錯誤,這表明程式本身可能無法繼續執行
這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。預設的是WARNING,當在WARNING或之上時才被跟蹤。
2. 日誌輸出
有兩種方式記錄跟蹤,一種輸出控制檯,另一種是記錄到檔案中,如日誌檔案。
2.1、將日誌輸出到控制檯
import logging
logging.basicConfig(level=logging.WARNING,
format=`%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s`)
# 開始使用log
logging.info("這是 logging info message")
logging.debug("這是 logging debug message")
logging.warning("這是 logging warning message")
logging.error("這是 logging error message")
logging.critical("這是 logging critical message")
# 輸出結果
# 2019-01-27 10:00:27,896 - 將日誌輸出控制檯.py[line:9] - WARNING: 這是 logging warning message
# # # 2019-01-27 10:00:27,896 - 將日誌輸出控制檯.py[line:10] - ERROR: 這是 logging error message
# # # 2019-01-27 10:00:27,896 - 將日誌輸出控制檯.py[line:11] - CRITICAL: 這是 logging critical message
說明
通過logging.basicConfig函式對日誌的輸出格式及方式做相關配置,上面程式碼設定日誌的輸出等級是WARNING級別,意思是WARNING級別以上的日誌才會輸出。另外還制定了日誌輸出的格式。
注意,只要用過一次log功能再次設定格式時將失效,實際開發中格式肯定不會經常變化,所以剛開始時需要設定好格式
2.2、將日誌輸出到檔案
我們還可以將日誌輸出到檔案,只需要在logging.basicConfig函式中設定好輸出檔案的檔名和寫檔案的模式
import logging
logging.basicConfig(level=logging.WARNING,
filename=`log.txt`,
filemode=`w`,
format=`%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s`)
# 開始使用log
logging.info("這是 logging info message")
logging.debug("這是 logging debug message")
logging.warning("這是 logging warning message")
logging.error("這是 logging error message")
logging.critical("這是 logging critical message")
2.3、既要把日誌輸出到控制檯, 還要寫入日誌檔案
import logging
# 第一步, 建立一個logger
logger = logging.getLogger()
logger.setLevel(logging.INFO) # log等級總開關
# 第二步,建立一個handler,用於寫入日誌檔案
logfile = `log.txt`
fh = logging.FileHandler(logfile, mode=`a`, encoding=`utf-8`) # open的開啟模式
fh.setLevel(logging.DEBUG) # 輸出到file的log等級的開關
# 第三步, 再建立一個handler,用於輸出控制檯
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING) # 輸出到控制檯的log等級的開關
# 第四步, 定義handler的輸出格式
formatter = logging.Formatter(`%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s`)
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 第五步, 將logger新增到handler裡面
logger.addHandler(fh)
logger.addHandler(ch)
# 日誌
logging.info("這是 logging info message")
logging.debug("這是 logging debug message")
logging.warning("這是 logging warning message")
logging.error("這是 logging error message")
logging.critical("這是 logging critical message")
3、日誌格式說明
logging.basicConfig函式中,可以指定日誌的輸出格式format,這個引數可以輸出很多有用的資訊,如下:
%(levelno)s: 列印日誌級別的數值
%(levelname)s: 列印日誌級別名稱
%(pathname)s: 列印當前執行程式的路徑,其實就是sys.argv[0]
%(filename)s: 列印當前執行程式名
%(funcName)s: 列印日誌的當前函式
%(lineno)d: 列印日誌的當前行號
%(asctime)s: 列印日誌的時間
%(thread)d: 列印執行緒ID
%(threadName)s: 列印執行緒名稱
%(process)d: 列印程式ID
%(message)s: 列印日誌資訊
在工作中給的常用格式如下:
format=`%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s`
這個格式可以輸出日誌的列印時間,是哪個模組輸出的,輸出的日誌級別是什麼,以及輸入的日誌內容。
原文:http://www.cnblogs.com/haiyan123/p/7382604.html