python模組: hashlib模組, configparse模組, logging模組

來源:互聯網
上載者:User

標籤:eve   bitbucket   而且   十六進位   val   路徑名   format   使用   div   

一. hashlib模組

   Python的hashlib提供了常見的摘要演算法,如MD5,SHA1等等。

  摘要演算法又稱雜湊演算法、散列演算法。它通過一個函數,把任意長度的資料轉換為一個長度固定的資料串(通常用16進位的字串表示)。

  摘要演算法就是通過摘要函數f()對任意長度的資料data計算出固定長度的摘要digest,目的是為了發現未經處理資料是否被人篡改過。摘要演算法之所以能指出資料是否被篡改過,就是因為摘要函數是一個單向函數,計算f(data)很容易,但通過digest反推data卻非常困難。而且,對未經處理資料做一個bit的修改,都會導致計算出的摘要完全不同。

  對於同一個字串,不管這個字串有多長,只要是相同的,無論在任何環境下,多少次執行,在任何語言中使用相同的演算法\相同的手段得到的結果永遠是相同的, 只要不是相同的字串,得到的結果一定不同.

1. MD5演算法

  md5是一個演算法,32位的字串,每個字元都是一個十六進位, md5演算法特點: 效率快 演算法相對簡單

import hashlibs = ‘hello,world!‘md5_obj = hashlib.md5()md5_obj.update(s.encode(‘utf-8‘))res = md5_obj.hexdigest()print(res, type(res), len(res))# c0e84e870874dd37ed0d164c7986f03a <class ‘str‘> 32

  雖然md5的值不會被反推, 但是有很多人通過撞庫的方法來擷取原字串.

  撞庫: 使用者密碼通過計算出的md5的值唄存再資料庫, 但是有一批人通過實驗許多密碼,計算出這些密碼的md5值, 再去擷取別人的資料庫(密碼)拿來對比md5值,若是相同則可以得出密碼是多少.這樣密碼就不安全了.所以可以通過加鹽的方法來解決這種問題.

username = ‘jack‘password = ‘123jack‘md5_obj = hashlib.md5(username.encode(‘utf-8‘))  # 把使用者名稱當作鹽加進去md5_obj.update(password.encode(‘utf-8‘))res = md5_obj.hexdigest()print(res)  # b94b1a2cd520ddc887df5c946e246eac

  md5除了可以保護使用者密碼外, 還可以校檢檔案的一致性

with open(‘123‘, ‘rb‘)as f1:  # rb模式    md5_obj1 = hashlib.md5()    md5_obj1.update(f1.read())    res1 = md5_obj1.hexdigest()with open(‘321‘, ‘rb‘) as f2:  # 我把檔案321內容設定的與檔案123一樣    md5_obj2 = hashlib.md5()    md5_obj2.update(f2.read())    res2 = md5_obj2.hexdigest()print(res1)  # 537c68a40a4736c27358ae78616c9fa7print(res2)  # 537c68a40a4736c27358ae78616c9fa7

二. configparse模組

  該模組適用於設定檔的格式與windows ini檔案類似,可以包含一個或多個節(section),每個節可以有多個參數(鍵=值)。

import configparserconfig = configparser.ConfigParser()# print(config.sections())        #  []config.read(‘example.ini‘)# print(config.sections())        #   [‘bitbucket.org‘, ‘topsecret.server.com‘]# print(‘bytebong.com‘ in config) # False# print(‘bitbucket.org‘ in config) # True# print(config[‘bitbucket.org‘]["user"])  # hg# print(config[‘DEFAULT‘][‘Compression‘]) #yes# print(config[‘topsecret.server.com‘][‘ForwardX11‘])  #no# print(config[‘bitbucket.org‘])          #<Section: bitbucket.org># for key in config[‘bitbucket.org‘]:     # 注意,有default會預設default的鍵#     print(key)# print(config.options(‘bitbucket.org‘))  # 同for迴圈,找到‘bitbucket.org‘下所有鍵# print(config.items(‘bitbucket.org‘))    #找到‘bitbucket.org‘下所有索引值對# print(config.get(‘bitbucket.org‘,‘compression‘)) # yes get方法Section下的key對應的value

 

 

 

 

 

三.  logging模組

# 功能    # 1. 日誌格式的規範    # 2. 操作的簡化    # 3. 日誌的分級管理# logging不能幫你做的事情    # 自動產生你要列印的內容# 需要程式員自己在開發的時候定義好 :    # 在哪些地方需要列印,要列印的內容是什麼,內容的層級# logging模組的使用 :    # 普通配置型 簡單的 可定製化差    # 對象配置型 複雜的 可定製化強# 認識日誌分級# import logging# logging.debug(‘debug message‘)      # 偵錯模式# logging.info(‘info message‘)        # 基礎資訊# logging.warning(‘warning message‘)  # 警告# logging.error(‘error message‘)      # 錯誤# logging.critical(‘critical message‘)# 嚴重錯誤

  日誌資訊在螢幕上顯示

import logginglogging.basicConfig(level=logging.DEBUG)  # 若是沒有設定 level=logging.DEBUG 參數, debug(調試資訊)和info(基礎資訊)不會被列印顯示logging.debug(‘debug message‘)      # 偵錯模式logging.info(‘info message‘)        # 基礎資訊logging.warning(‘warning message‘)  # 警告logging.error(‘error message‘)      # 錯誤logging.critical(‘critical message‘)# 嚴重錯誤# DEBUG:root:debug message# INFO:root:info message# WARNING:root:warning message# ERROR:root:error message# CRITICAL:root:critical message

  日誌還能寫在檔案裡, 但是不能同時顯示在螢幕上

# 把日誌顯示在檔案裡, 日誌格式import logginglogging.basicConfig(level=logging.DEBUG,                    format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,                    datefmt=‘%a, %d %b %Y %H:%M:%S‘,                    filename=‘test.log‘)  # filename參數是檔案的名字logging.debug(‘debug message‘)      # 偵錯模式logging.info(‘info message‘)        # 基礎資訊logging.warning(‘warning message‘)  # 警告logging.error(‘error message‘)      # 錯誤logging.critical(‘critical message‘)# 嚴重錯誤

  日誌配置參數:

logging.basicConfig()函數中可通過具體參數來更改logging模組預設行為,可用參數有:filename:用指定的檔案名稱建立FiledHandler,這樣日誌會被儲存在指定的檔案中。filemode:檔案開啟檔案,在指定了filename時使用這個參數,預設值為“a”還可指定為“w”。format:指定handler使用的日誌顯示格式。datefmt:指定日期時間格式。level:設定rootlogger(後邊會講解具體概念)的記錄層級stream:用指定的stream建立StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者檔案(f=open(‘test.log’,’w’)),預設為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。format參數中可能用到的格式化串:%(name)s Logger的名字%(levelno)s 數字形式的記錄層級%(levelname)s 文本形式的記錄層級%(pathname)s 調用日誌輸出函數的模組的完整路徑名,可能沒有%(filename)s 調用日誌輸出函數的模組的檔案名稱%(module)s 調用日誌輸出函數的模組名%(funcName)s 調用日誌輸出函數的函數名%(lineno)d 調用日誌輸出函數的語句所在的程式碼%(created)f 目前時間,用UNIX標準的表示時間的浮 點數表示%(relativeCreated)d 輸出日誌資訊時的,自Logger建立以 來的毫秒數%(asctime)s 字串形式的目前時間。預設格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒%(thread)d 線程ID。可能沒有%(threadName)s 線程名。可能沒有%(process)d 進程ID。可能沒有%(message)s使用者輸出的訊息
配置參數

  logging對象動作記錄檔案步驟

# logger對象的形式來動作記錄檔案# 建立一個logger對象# 建立一個檔案管理操作符# 建立一個螢幕管理操作符# 建立一個日誌輸出的格式# 檔案管理操作符 綁定一個 格式# 螢幕管理操作符 綁定一個 格式# logger對象 綁定 檔案管理操作符# logger對象 綁定 螢幕管理操作符
import logging# 建立一個logger對象logger = logging.getLogger()# 建立一個檔案管理操作符fh = logging.FileHandler(‘logger.log‘,encoding=‘utf-8‘)# 建立一個螢幕管理操作符sh = logging.StreamHandler()# 建立一個日誌輸出的格式format1 = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)# 檔案管理操作符 綁定一個 格式fh.setFormatter(format1)# 螢幕管理操作符 綁定一個 格式sh.setFormatter(format1)logger.setLevel(logging.DEBUG)# logger對象 綁定 檔案管理操作符# logger.addHandler(fh)# logger對象 綁定 螢幕管理操作符logger.addHandler(sh)logger.debug(‘debug message‘)      # 偵錯模式logger.info(‘我的資訊‘)        # 基礎資訊logger.warning(‘warning message‘)  # 警告logger.error(‘error message‘)      # 錯誤logger.critical(‘critical message‘)# 嚴重錯誤# 2018-08-10 19:35:36,980 - root - DEBUG - debug message# 2018-08-10 19:35:36,980 - root - INFO - 我的資訊# 2018-08-10 19:35:36,980 - root - WARNING - warning message# 2018-08-10 19:35:36,980 - root - ERROR - error message# 2018-08-10 19:35:36,980 - root - CRITICAL - critical message

 

python模組: hashlib模組, configparse模組, logging模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.