常用模塊之hashlib,configparser,logging模塊

常用模塊二

hashlib模塊

hashlib提供了常見的摘要算法,如md5和sha1等等。

那么什么是摘要算法呢?摘要算法又稱為哈希算法、散列算法。它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進制的字符串表示)。

注意:摘要算法不是一個解密算法。(摘要算法,檢測一個字符串是否發生了變化)

應用:1.做文件校驗

   2.登錄密碼

      密碼不能解密,但可以撞庫,用‘加鹽’的方法就可以解決撞庫的問題。所有以后設置密碼的時候要設置的復雜一點。

 1 import hashlib
 2 # md5_obj = hashlib.md5()  未加鹽
 3 md5_obj = hashlib.md5('nezha'.encode('utf-8')) #加鹽后(就讓你的密碼更牢固了)
 4 md5_obj.update('123456'.encode('utf-8'))
 5 print(md5_obj.hexdigest())
 6 md5_obj.update('hello'.encode('utf-8'))
 7 print(md5_obj.hexdigest())
 8 # -----------
 9 user = 'haiyan'
10 password = '123456'
11 md5_obj= hashlib.md5(user.encode('utf-8'))  #加鹽(哪怕被人的密碼和你的密碼一樣,
12 # 那你加鹽以后就只有你的用戶名對應的是你的密碼了)
13 md5_obj.update(password.encode('utf-8'))
14 print(md5_obj.hexdigest())
用戶密碼
 1 import hashlib
 2 md5_obj = hashlib.md5()
 3 import os
 4 filesize = os.path.getsize('filename')  #文件大小
 5 f = open('filename','rb')
 6 while filesize>0:
 7     if filesize > 1024:
 8         content = f.read(1024)
 9         filesize -= 1024
10     else:
11         content = f.read(filesize)
12         filesize -= filesize
13     md5_obj.update(content)
14 # for line in f:
15 #     md5_obj.update(line.encode('utf-8'))
16 md5_obj.hexdigest()
文件校驗(檢測文件改變了沒)

configparser模塊

該模塊適用于配置文件的格式與windows ?ini文件類似,可以包含一個或多個節(section),每個節可以有多個參數(鍵=值)。

1.創建文件

 1 import configparser
 2 config = configparser.ConfigParser()
 3 config["DEFAULT"] = {'ServerAliveInterval': '45',
 4                       'Compression': 'yes',
 5                      'CompressionLevel': '9',
 6                      'ForwardX11':'yes'
 7                      }
 8 config['bitbuck et.org'] = {'User':'hg'}
 9 config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}
10 with open('example.ini', 'w') as configfile:
11    config.write(configfile)
創建文件

2.查找文件

 1 import configparser
 2 config = configparser.ConfigParser()
 3 # print(config.sections())
 4 config.read('example.ini')
 5 print(config.sections())  #讀出來的是文件里面的組,
 6 # 而且里面的[DEFAULT]組沒有顯示出來
 7 print('bytebong.com' in config) # False
 8 print('bitbucket.org' in config) # True
 9 print(config['bitbucket.org']["user"])  # hg
10 print(config['DEFAULT']['Compression']) #yes
11 print(config['topsecret.server.com']['ForwardX11'])  #no
12 print(config['bitbucket.org'])          #<Section: bitbucket.org>
13 for key in config['bitbucket.org']:     # 注意,有default會默認default的鍵
14     print(key)
15 print(config.options('bitbucket.org'))  # 同for循環,找到'bitbucket.org'下所有鍵
16 print(config.items('bitbucket.org'))    #找到'bitbucket.org'下所有鍵值對
17 print(config.get('bitbucket.org','compression')) # yes       get方法Section下的key對應的value
查找文件

3.增刪改操作

1 import configparser
2 config = configparser.ConfigParser()
3 config.read('example.ini')
4 config.add_section('yuan')
5 # config.remove_section('bitbucket.org') #刪除組
6 # config.remove_option('topsecret.server.com',"forwardx11") #刪除組里面的項
7 config.set('topsecret.server.com','k1','11111')
8 config.set('yuan','k2','22222')
9 config.write(open('new2.ini', "w"))
增刪改操作

logging模塊

?函數式簡單配置

默認情況下Python的logging模塊將日志打印到了標準輸出中,且只顯示了大于等于WARNING級別的日志,這說明默認的日志級別設置為WARNING(日志級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG),默認的日志格式為日志級別:Logger名稱:用戶輸出消息。

1 只顯示大于等于warning基本的日志,這說明默認的日志級別設置為warning
2 (日志級別等級critical>error>warning>info>debug)
3 import logging
4 logging.debug('debug message')
5 logging.info('info message')
6 logging.warning('warning message')  #warning 警告(從警告開始才執行)
7 logging.error('error message') #error 錯誤
8 logging.critical('critical message') #比錯誤更嚴重的級別

?配置參數

 1 logging.basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有:
 2 
 3 filename:用指定的文件名創建FiledHandler,這樣日志會被存儲在指定的文件中。
 4 filemode:文件打開方式,在指定了filename時使用這個參數,默認值為“a”還可指定為“w”。
 5 format:指定handler使用的日志顯示格式。
 6 datefmt:指定日期時間格式。
 7 level:設置rootlogger(后邊會講解具體概念)的日志級別
 8 stream:用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。
 9 
10 format參數中可能用到的格式化串:
11 %(name)s Logger的名字
12 %(levelno)s 數字形式的日志級別
13 %(levelname)s 文本形式的日志級別
14 %(pathname)s 調用日志輸出函數的模塊的完整路徑名,可能沒有
15 %(filename)s 調用日志輸出函數的模塊的文件名
16 %(module)s 調用日志輸出函數的模塊名
17 %(funcName)s 調用日志輸出函數的函數名
18 %(lineno)d 調用日志輸出函數的語句所在的代碼行
19 %(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示
20 %(relativeCreated)d 輸出日志信息時的,自Logger創建以 來的毫秒數
21 %(asctime)s 字符串形式的當前時間。默認格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒
22 %(thread)d 線程ID。可能沒有
23 %(threadName)s 線程名。可能沒有
24 %(process)d 進程ID。可能沒有
25 %(message)s用戶輸出的消息
配置參數

?有兩種方式去應用logging模塊

1.設置config

 1 import logging
 2 logging.basicConfig(
 3     level=logging.DEBUG ,    #多輸出一些細節
 4     # level = logging.WARNING  #就不用輸出那些細節了
 5     format = '%(name)s %(asctime)s [%(lineno)d] ---%(message)s', #本身就存在在python語法中,拿過來用就行了
 6     # level和format也是不能變的,它是參數,不是變量
 7     # %(lineno)d指定代碼塊的行
 8     # %(name)s當前管理員的用戶
 9     datefmt = '%d/%m/%Y %H:%M:%S',#指定日期時間格式
10     filename = 'logging_info' #自動創建了一個文件,并且把日志寫到了文件里
11 
12 )
13 logging.debug('debug message')
14 logging.info('info message')
15 logging.warning('warning message')
16 logging.error('error message')
17 logging.critical('critical message')
設置config

?2.logger對象配置

可以控制輸入到文件,也可以輸入到屏幕

可以同時在幾個文件中輸出

 1 import logging
 2 def mylogger(filename,file=True,stream=True):
 3     logger = logging.getLogger()
 4     formater = logging.Formatter(
 5         fmt='%(name)s %(asctime)s [%(lineno)d] ---%(message)s',
 6         datefmt='%d/%m/%Y %H:%M:%S'  # 時間格式
 7     )
 8     logger.setLevel(logging.DEBUG)  #指定日志打印的等級
 9     if file:
10         file_handler = logging.FileHandler('logging.log',encoding='utf-8')# 創建一個handler,用于寫入日志文件
11         file_handler.setFormatter(formater)  # 文件流,文件操作符
12         logger.addHandler(file_handler)
13     if stream:
14         stream_handler = logging.StreamHandler()  # 再創建一個handler,用于輸出到控制臺
15         stream_handler.setFormatter(formater) #屏幕流,屏幕操作流
16         #如果想讓文件流和屏幕流輸出的東西的格式不一樣,那么就在寫一個 格式formater1,這樣就可以了
17         logger.addHandler(stream_handler)
18     return logger
19 logger = mylogger('logging.log',file=False)
20 logger.warning('啦啦啦啦')
21 logger.debug('debug message')
logger對象

logging庫提供了多個組件:Logger、Handler、Filter、Formatter。Logger對象提供應用程序可直接使用的接口,Handler發送日志到適當的目的地,Filter提供了過濾日志信息的方法,Formatter指定日志顯示格式。另外,可以通過:logger.setLevel(logging.Debug)設置級別,當然,也可以通過

fh.setLevel(logging.Debug)單對文件流設置某個級別。

轉載于:https://www.cnblogs.com/lianxuebin/p/7400156.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252036.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252036.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252036.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iPhone屏幕各種尺寸分辨率(更新至XS)

iPhone屏幕各種尺寸分辨率&#xff08;更新至XS&#xff09; DeviceLogic PointLogic PixelSizeScaleiPhone 2G480 320480 3203.51xiPhone 3480 320480 3203.51xiPhone 3GS480 320480 3203.51xiPhone 4480 320960 6403.52xiPhone 4S480 320960 6403.52xiPhone 5568 …

浙江嘉興徒步游

最近參加了一個徒步團&#xff0c;趁著周末時光&#xff0c;來了一場徒步旅游&#xff0c;不一樣的體驗圖片發自簡書App一開始進山探秘外蒲島的路程&#xff0c;荒草叢生圖片發自簡書App樹木郁郁蔥蔥&#xff0c;藍天白云&#xff0c;一切都很沒好圖片發自簡書App漫山遍野都開滿…

ASP.NET Web API 2 過濾器

前言 我們知道 ASP.NET Web API 過濾器&#xff0c;也是屬于消息處理機制中的一部分。正因如此&#xff0c;我們經常使用它來完成對請求的授權驗證、參數驗證&#xff0c;以及請求的 Log 記錄&#xff0c;程序異常捕獲等。 1. 常用的四大過濾器 ASP.NET Web API 2 中的所有…

java的ThreadLocal類的使用方法

java的ThreadLocal類的使用方法&#xff0c;ThreadLocal是一個支持泛型的類&#xff0c;用在多線程中用于防止并發沖突問題。比如以下的一個樣例&#xff0c;就是用于線程添加1&#xff0c;可是相互不沖突 package com.test.threadlocal;import java.util.concurrent.ExecutorS…

為選擇合適的ERP供應商,是否該發布需求建議書(RFP)?

全球有成百上千家企業資源規劃 (ERP) 解決方案供應商。在開展挑選 ERP 供應商的項目時&#xff0c;不可能與所有這些供應商都進行接觸。不斷縮小這一領域供應商的范圍&#xff0c;直到最終敲定最適合的入圍名單&#xff08;通常被稱為“最終候選人名單”&#xff09;是項目成功…

kettle插入更新流程

kettle轉換步驟工作組件 這里有四個類構成了這個kettle 步驟/節點&#xff0c;每一個類都有其特定的目的及所扮演的角色。 TemplateStep: 步驟類實現了StepInteface接口&#xff0c;在轉換運行時&#xff0c;它的實例將是數據實際處理的位置。每一個執行線程都表示一個此類的實…

打開mobilenet——ssd的demo.py顯示這樣的錯誤解決方法:Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.s

終于找到方法了&#xff1a; ubuntu14.04打開終端&#xff1a; conda install nomkl numpy scipy scikit-learn numexpr conda remove mkl mkl-service一切ok。。。。。

C++ class、struct區別

一、默認訪問控制不同&#xff08;最主要&#xff09; struct默認為public&#xff0c;class默認為private。這個訪問控制既是指成員的默認訪問屬性&#xff0c;又指繼承時默認的繼承屬性。 二、定義template時不同 在模版中&#xff0c;類型參數前面可以使用class或typename&a…

Alpine Linux詳解

簡介 Small. Simple. Secure.Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox. Alpine Linux 是一個社區開發的面向安全應用的輕量級Linux發行版。 Alpine 的意思是“高山的”&#xff0c;它采用了musl libc和busybox以減…

java stream 原理

java stream 原理 需求 從"Apple" "Bug" "ABC" "Dog"中選出以A開頭的名字&#xff0c;然后從中選出最長的一個&#xff0c;并輸出其長度 1. 最直白的實現 缺點 迭代次數過多頻繁產生中間結果&#xff0c;性能無法接受2. 平常寫法 int …

ubuntu文本模式獲得權限修改profile

針對ubuntu14.04以下&#xff0c;越舊版本&#xff0c;舊的指令也有效。 進入登錄頁面&#xff0c;按shiftaltF1進入root環境&#xff0c;驗證用戶名密碼。 然后輸入&#xff1a;cd /etc 進入etc文件 在輸入&#xff1a;/usr/bin/sudo vi profile 進入profile文件的文本編輯模…

here文檔 here doc EOF重定向

here文檔 here doc EOF重定向 http://www.cnblogs.com/xiangzi888/archive/2012/03/24/2415077.html 在shell腳本程序中&#xff0c;向一條命令傳遞輸入的一種特殊方法是使用here文檔。一個here document就是一段帶有特殊目的的代碼段。它使用I/O重定向的形式將一個命令序列傳…

Java常量池理解與總結

2019獨角獸企業重金招聘Python工程師標準>>> 一.相關概念 什么是常量用final修飾的成員變量表示常量&#xff0c;值一旦給定就無法改變&#xff01;final修飾的變量有三種&#xff1a;靜態變量、實例變量和局部變量&#xff0c;分別表示三種類型的常量。Class文件中…

轉載:https://blog.csdn.net/dcrmg/article/details/52939318

張正友相機標定Opencv實現以及標定流程&&標定結果評價&&圖像矯正流程解析&#xff08;附標定程序和棋盤圖&#xff09;使用Opencv實現張正友法相機標定之前&#xff0c;有幾個問題事先要確認一下&#xff0c;那就是相機為什么需要標定&#xff0c;標定需要的輸…

Redis學習筆記--Redis數據過期策略詳解==轉

本文對Redis的過期機制簡單的講解一下  講解之前我們先拋出一個問題&#xff0c;我們知道很多時候服務器經常會用到redis作為緩存&#xff0c;有很多數據都是臨時緩存一下&#xff0c;可能用過之后很久都不會再用到了&#xff08;比如暫存session&#xff0c;又或者只存放日行…

會員連鎖配置以及金額走向

PS&#xff1a;所有電子支付方式的資金走向都是同樣的&#xff0c;配置的是什么支付方式就走什么支付方式;下面以支付寶為例說明 一、連鎖非總機模式 資金走向&#xff1a; 支付寶&#xff1a;收到的錢在主賬號配置的支付寶&#xff0c;會員卡的金額在主賬號 微信&#xff1a;收…

Python標準模塊--logging

Python標準模塊--logging參考http://www.cnblogs.com/zhbzz2007/p/5943685.html1 logging模塊簡介logging模塊是Python內置的標準模塊&#xff0c;主要用于輸出運行日志&#xff0c;可以設置輸出日志的等級、日志保存路徑、日志文件回滾等&#xff1b;相比print&#xff0c;具備…

Podfile grammar

參考&#xff1a;http://www.jianshu.com/p/8af475c4f717 Podfile Podfile文件詳細描述了一個或多個工程中targets的依賴關系。Podfile會默認創建一個隱式的目標鏈接到工程中用戶的第一個target&#xff0c;名稱為“default”。 一個Podfile可以非常簡單: *pod AFNetworking, ~…

并發編程 - 協程 - 1.協程概念/2.greenlet模塊/3.gevent模塊/4.gevent實現并發的套接字通信...

1.協程并發&#xff1a;切保存狀態單線程下實現并發&#xff1a;協程 切 保存狀態 yield 遇到io切&#xff0c;提高效率 遇到計算切&#xff0c;并沒有提高效率 檢測單線程下 IO行為 io阻塞 切 相當于騙操作系統 一直處于計算協程&#xff1a;。。。單線程下實現…

pymysql

連接數據庫 連接時需要額外指定參數dbcursor.execute( ) 操作SQL語句SELECT VERSION() 獲得當前版本CREATE DATABASE spiders DEFAULT CHARACTER SET utf8 創建數據庫import pymysql db pymysql.connect(hostlocalhost,user ,password ,port3306)#IP&#xff0c;用戶名&#x…