1. 程式人生 > >Python常用模塊之json、pickle、random、hashlib、collections

Python常用模塊之json、pickle、random、hashlib、collections

隨機 寫入文件 用戶 encode 引用 pickle turn 適合 collect

1、json和pickle

json用於字符串和Python數據類型間進行轉換
pickle用於python特有的類型和python的數據類型間進行轉換
json和pickle均提供了四種方法dumps,dump,loads,load

##json
dumps()   ##轉換成字符串
loads()   ##將json編碼的字符串再轉換為python的數據結構
dump()    ##轉換成字符串並存存儲到文件中
load()    ##從數據文件中讀取數據,並將json編碼的字符串轉換為python的數據結構

>>> print(json.dumps([aa, bb
, cc])) ["aa", "bb", "cc"] >>> print(json.loads(["aa", "bb", "cc"])) [aa, bb, cc] ##pickle dumps() ##將數據通過特殊的形式轉換為只有python語言認識的字符串 loads() ##將pickle數據轉換為python的數據結構 dump() ##將數據通過特殊的形式轉換為只有python語言認識的字符串,並寫入文件 load() ##從數據文件中讀取數據,並轉換為python的數據結構 >>> print(pickle.dumps([
aa, bb, cc])) b\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e. >>> print(pickle.loads(b\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.)) [aa, bb, cc]

2、random

random.random()           ##0~1之間的隨機小數
random.uniform(1,3)       ##1~3之間的隨機小數
random.randint(1,5)       #
#[1,5]之間的隨機整數 random.randrange(1,10,2) ##[1,10) 之間隨機奇數,間隔為2的數 random.choice([1,23,[4,5]]) ##隨機選擇一個返回 random.sample([1,23,[4,5]],2) ##隨機選擇多個返回,返回的個數為函數的第二個參數 random.shuffle([1,3,5,7,9]) ##打亂列表順序 ##返回驗證碼 import random def v_code(): code = ‘‘ for i in range(5): num=random.randint(0,9) alf=chr(random.randint(65,90)) add=random.choice([num,alf]) code="".join([code,str(add)]) return code print(v_code())

3、hashlib

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

##md5計算
md5 = hashlib.md5("key".encode("utf8"))   ##可以添加秘鑰,秘鑰可以是用戶id,這樣就算密碼相同,加密後的md5也是不一樣的
md5.update(blove fly)
print(md5.hexdigest())

##SHA1
sha1 = hashlib.sha1("key".encode("utf8"))
sha1.update(blove fly)
print(sha1.hexdigest())

##計算MD5
>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update(blove fly)
>>> print(md5.hexdigest())
61976ec704dbce25ccb37ecacef1e4d6

##如果數據量很大,可以分塊多次調用update(),最後計算的結果是一樣的
>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update(blove)
>>> md5.update(b fly)
>>> print(md5.hexdigest())
61976ec704dbce25ccb37ecacef1e4d6

4、collections

ollections是Python內建的一個集合模塊,提供了許多有用的集合類,是python對默認數據結構的一種補充

##namedtuple是一個函數,它用來創建一個自定義的元組對象,並且規定了元組元素的個數,並可以用屬性而不是索引來引用元組的某個元素。
>>> from collections import namedtuple
>>> colltuple = namedtuple(colltuple, [x,y])
>>> col = colltuple(yong,fly)
>>> col.x
yong
>>> col.y
fly
在內置數據類型(dict、list、set、tuple)的基礎上,collections模塊還提供了幾個額外的數據類型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
1.namedtuple: 生成可以使用名字來訪問元素內容的tuple
2.deque: 雙端隊列,可以快速的從另外一側追加和推出對象
3.Counter: 計數器,主要用來計數
4.OrderedDict: 有序字典
5.defaultdict: 帶有默認值的字典


##deque: list插入和刪除元素很慢,數據量大的時候,插入和刪除效率很低。deque是為了高效實現插入和刪除操作的雙向列表,適合用於隊列和棧。
>>> from collections import deque
>>> q = deque([a,b,c])
>>> q.append(d)       ##默認添加列表最後一項
>>> q.appendleft(e)   ##添加到列表第一項
>>> q
deque([e, a, b, c, d])
>>> q.pop()             ##默認刪除列表最後一個元素
d
>>> q.popleft()         ##刪除列表的第一個元素
e
>>> q
deque([a, b, c])

##defaultdict使用字典時,如果引用的Key不存在,就會拋出 KeyError,如果希望key不存在時,返回一個默認值,就可以用 defaultdict. 
    X=defaultdict(lambda: N/A)
##OrderedDict有序字典的應用。OrderedDict 的有序性是按照插入的順序,而不是KEY的順序。
##Counter簡單的計數器,例如,統計字符出現的個數。

Python常用模塊之json、pickle、random、hashlib、collections