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

时间:2021-11-21 22:33:29

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(b'love fly')
print(md5.hexdigest())

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

##计算MD5
>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update(b'love fly')
>>> print(md5.hexdigest())
61976ec704dbce25ccb37ecacef1e4d6

##如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的
>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update(b'love')
>>> 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简单的计数器,例如,统计字符出现的个数。