Python學習—基礎篇之常用模塊
常用模塊
模塊,用一砣代碼實現了某個功能的代碼集合。
類似於函數式編程和面向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對於一個復雜的功能來,可能需要多個函數才能完成(函數又可以在不同的.py文件中),n個 .py 文件組成的代碼集合就稱為模塊。
python常用模塊主要有:
1. time模塊
2. random模塊
3. hashlib模塊
4. os模塊
5. sys模塊
6. logging模塊
7. 序列化模塊
8. configparser模塊
9. re模塊
10. shutul模塊
11. subprocess模塊
12. xml模塊
13. paramiko模塊
引入模塊的方式
1 import module 2 import module.xxx as name 3 from module import xxx,xxx 4 from module import *
對於第二種的引入方式,將導入的模塊或者模塊方法重命名,個人覺得好處主要有以下兩點:
1.對於模塊名過於冗長的模塊,可以方便使用;
2.對於某些功能可能涉及到修改模塊的源碼,這樣的導入方式可以避免影響到原來的模塊(類似於為每個項目建一個自己的虛擬環境)。
time模塊
1.表示時間的三種方式:
(1)時間戳(timestamp) :通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”,返回的是float類型。
(2)格式化的時間字符串(Format String): ‘1988-03-16’
(3)元組(struct_time) :struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天等)
時間戳是計算機能夠識別的時間;時間字符串是人能夠看懂的時間;元組則是用來操作時間的
# <1> 時間戳 import time time.time() #--------------返回當前時間的時間戳:1493136727.099066 # <2> 時間字符串 time.strftime("%Y-%m-%d %X") #-----------‘2017-04-26 00:32:18‘ # <3> 時間元組 time.localtime() time.struct_time(tm_year=2017, tm_mon=4, tm_mday=26, tm_hour=0, tm_min=32, tm_sec=42, tm_wday=2, tm_yday=116, tm_isdst=0)
2.幾種時間形式的轉換
1 #一 時間戳<---->結構化時間: localtime/gmtime mktime 2 3 time.localtime(3600*24) 4 time.gmtime(3600*24) 5 6 time.mktime(time.localtime()) 7 8 9 #字符串時間<---->結構化時間: strftime/strptime 10 11 time.strftime("%Y-%m-%d %X", time.localtime()) 12 time.strptime("2017-03-16","%Y-%m-%d")
1 time.asctime(time.localtime(312343423)) 2 3 time.ctime(312343423)
3.time & datetime常用操作
1 #_*_coding:utf-8_*_ 2 __author__ = ‘Alex Li‘ 3 4 import time 5 6 7 # print(time.clock()) #返回處理器時間,3.3開始已廢棄 , 改成了time.process_time()測量處理器運算時間,不包括sleep時間,不穩定,mac上測不出來 8 # print(time.altzone) #返回與utc時間的時間差,以秒計算\ 9 # print(time.asctime()) #返回時間格式"Fri Aug 19 11:14:16 2016", 10 # print(time.localtime()) #返回本地時間 的struct time對象格式 11 # print(time.gmtime(time.time()-800000)) #返回utc時間的struc時間對象格式 12 13 # print(time.asctime(time.localtime())) #返回時間格式"Fri Aug 19 11:14:16 2016", 14 #print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上 15 16 17 18 # 日期字符串 轉成 時間戳 19 # string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #將 日期字符串 轉成 struct時間對象格式 20 # print(string_2_struct) 21 # # 22 # struct_2_stamp = time.mktime(string_2_struct) #將struct時間對象轉成時間戳 23 # print(struct_2_stamp) 24 25 26 27 #將時間戳轉為字符串格式 28 # print(time.gmtime(time.time()-86640)) #將utc時間戳轉換成struct_time格式 29 # print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #將utc struct_time格式轉成指定的字符串格式 30 31 32 33 34 35 #時間加減 36 import datetime 37 38 # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925 39 #print(datetime.date.fromtimestamp(time.time()) ) # 時間戳直接轉成日期格式 2016-08-19 40 # print(datetime.datetime.now() ) 41 # print(datetime.datetime.now() + datetime.timedelta(3)) #當前時間+3天 42 # print(datetime.datetime.now() + datetime.timedelta(-3)) #當前時間-3天 43 # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #當前時間+3小時 44 # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #當前時間+30分 45 46 47 # 48 # c_time = datetime.datetime.now() 49 # print(c_time.replace(minute=3,hour=2)) #時間替換View Code
random模塊
1 import random 2 random.random() # 大於0且小於1之間的小數 0.7664338663654585 3 4 random.randint(1,5) # 大於等於1且小於等於5之間的整數 5 6 random.randrange(1,3) # 大於等於1且小於3之間的整數 7 8 random.choice([1,‘23‘,[4,5]]) # #1或者23或者[4,5] 9 10 random.sample([1,‘23‘,[4,5]],2) # #列表元素任意2個組合 [[4, 5], ‘23‘] 11 12 random.uniform(1,3) #大於1小於3的小數 1.6270147180533838 13 14 item=[1,3,5,7,9] 15 random.shuffle(item) # 打亂次序 item[5, 1, 3, 7, 9] 16 random.shuffle(item) # item [5, 9, 7, 1, 3]View Code
1 # 隨機生成驗證碼 2 3 import random 4 5 def v_code(): 6 7 code = ‘‘ 8 for i in range(5): 9 10 num=random.randint(0,9) 11 alf=chr(random.randint(65,90)) 12 add=random.choice([num,alf]) 13 code="".join([code,str(add)]) 14 15 return code 16 17 print(v_code())隨機生成驗證碼
hashlib模塊
哈希算法(散列算法):通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進制的字符串表示),常常用於對密碼進行加密。hashlib模塊主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 等加密算法。
1 import hashlib 2 3 # ######## md5 ######## 4 hash = hashlib.md5() 5 # help(hash.update) 6 hash.update(bytes(‘admin‘, encoding=‘utf-8‘)) 7 print(hash.hexdigest()) #16進制格式hash 8 print(hash.digest()) #2進制格式hash 9 10 11 ######## sha1 ######## 12 13 hash = hashlib.sha1() 14 hash.update(bytes(‘admin‘, encoding=‘utf-8‘)) 15 print(hash.hexdigest()) 16 17 # ######## sha256 ######## 18 19 hash = hashlib.sha256() 20 hash.update(bytes(‘admin‘, encoding=‘utf-8‘)) 21 print(hash.hexdigest()) 22 23 24 # ######## sha384 ######## 25 26 hash = hashlib.sha384() 27 hash.update(bytes(‘admin‘, encoding=‘utf-8‘)) 28 print(hash.hexdigest()) 29 30 # ######## sha512 ######## 31 32 hash = hashlib.sha512() 33 hash.update(bytes(‘admin‘, encoding=‘utf-8‘)) 34 print(hash.hexdigest())View Code
以上加密算法雖然依然非常厲害,但時候存在缺陷,即:通過撞庫可以反解。所以,有必要對加密算法中添加自定義key再來做加密。
1 import hashlib 2 3 # ######## md5 ######## 4 5 hash = hashlib.md5(bytes(‘898oaFs09f‘,encoding="utf-8")) 6 hash.update(bytes(‘admin‘,encoding="utf-8")) 7 print(hash.hexdigest())
python內置還有一個 hmac 模塊,它內部對我們創建 key 和 內容 進行進一步的處理然後再加密
1 import hmac 2 3 h = hmac.new(bytes(‘898oaFs09f‘,encoding="utf-8")) 4 h.update(bytes(‘admin‘,encoding="utf-8")) 5 print(h.hexdigest())
To be continue....
Python學習—基礎篇之常用模塊