python基础之模块(json,pickle,hashlib,collections)
Posted zz洲神在此
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础之模块(json,pickle,hashlib,collections)相关的知识,希望对你有一定的参考价值。
json模块
json模块是将满足条件的数据结构转化成特殊的字符串,并且也可以反序列化还原回去。
用于网络传输:dumps、loads
用于文件写读:dump、load
dumps 将字典和列表转化为字符串类型
import json dic={"k1":"v1","k2":"v2","k3":"v3"} str_dic = json.dumps(dic) print(type(str_dic),str_dic) #class "str"
loads 将字符串类型的字典或列表转换成原数据类型字典或列表
import json dic={"k1":"v1","k2":"v2","k3":"v3"} dic2 = json.loads(str_dic) print(type(dic2),dic2) #class dict
dump 将对象转换成字符串写入文件中 默认一个json文件只能存储一个json数据
import json f = open("a.txt","w") dic = {"k1“:”v1",k2":"v2"} json.dump(dic,f) #dump 方法接受一个文件句柄,直接将字典转换成json字符串写入文件 不用f,write之类的,此时已经将dic写到a.txt中了
load 将字符串类型的字典或列表转换成原数据类型字典或列表
import json
f = open("a.txt")
dic2 = json.load(f) #load方法接受一个文件句柄,直接将文件中的json字符串转换成原数据结构返回
f.close()
print(type(dic2),dic2)
#<class 'dict'> {'k1': 'v1', 'k2': 'v2'}
pickle模块
pickle模块是将Python所有的数据结构以及对象等转化成bytes类型,然后还可以反序列化还原回去。
用于网络传输 dumps loads
用于文件写读 dump load
dumps
import pickle dic={'k1':'v1','k2':'v2','k3':'v3'} str_dic = pickle.dumps(dic) print(str_dic) bytes类型
loads
dic2=pickle.loads(str_dic) print(dic2) #字典内容
dump/load
变成字节写入文件
dic = {(1,2):'oldboy',1:True,'set':{1,2,3}} f = open('pick序列化',mode='wb') pickle.dump(dic,f) 打开文件,以字节形式写入dic f.close() f=open('pick序列化',mode='rb') print(pickle.load(f)) 读取字节,将文件中字节形式的字典返回
hashlib模块 加密算法
md5 sha1 sha256 sha512
md5 1.内容相同,密码一定相同 2 加密的密文不可逆 3 明文 字节 密文
简单的加密
import hashlib s ="1234567" m1 = hashlib.md5() #选择加密方式,初始化一个加密 m1.update(s.encode("utf-8")) #将要加密的内容,添加到m中 print(m1.hexdigest()) 进行加密 fcea920f7412b5da7be0cf42b8c93759
固定加盐
user = input("user:") sadasd pwd = input ("pwd") sadasd import hashlib md5 =hashlib.md5("oldboy".encode("utf-8")) #盐 md5.update(pwd.encode("utf-8")) print(md5.hexdigest())
动态加盐:
import hashlib user = input("user:") #zz洲神 pwd = input ("pwd") #洲神在此 md5 = hashlib.md5(user.encode("utf-8")) 盐 md5.update(pwd.encode("utf-8")) print(m‘d5.hexdigest()) 结果:user:zz洲神 pwd洲神在此 07bce8baf64e6bc38646b8d48655b5fe
collections模块
统计 Counter
lst = [11,2,2,123,1,1,123,12,12,32,12,31,23,123,21,3]
from collections import Counter # *** print(dict(Counter(lst))) 统计 结果 {11: 1, 2: 2, 123: 3, 1: 2, 12: 3, 32: 1, 31: 1, 23: 1, 21: 1, 3: 1}
有序字典 orderedDict
from collections import OrderedDict # *** a = OrderedDict({"key1":1,"key2":2}) print(a) print(a["key1"]) 输出结果 OrderedDict([('key1', 1), ('key2', 2)]) 模块的特殊数据类型,记就行了 1
默认字典 defaultdict
from collections import defaultdict dic = defaultdict(list) dic["key1"].append(10) 默认dic中的值是字典,也可以修改 都可以,看示例 dic["key2"].append(20) dic["ke3"]="xxxx" print(dic) 结果:defaultdict(<class 'list'>, {'key1': [10], 'key2': [20], 'ke3': 'xxxx'})
双端队列
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
from collections import deque q = deque(['a', 'b', 'c']) q.append('x') q.appendleft('y') print(q) deque(['y', 'a', 'b', 'c', 'x'])
deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。主要是实现了效率!
isinstance
判断当前数据类型,返回的是一个布尔值
确切的是判断前面的lst,是否是后面的Iterator的对象
from collections import Iterable,Iterator lst = [1,2,3,4] print(isinstance(lst,list)) # 判断lst是不是列表类型 返回的是True print(isinstance(lst,Iterator)) # 判断lst是不是迭代器 返回的是False print(isinstance(lst,Iterable)) # 判断lst是不是可迭代对象 返回的是True
以上是关于python基础之模块(json,pickle,hashlib,collections)的主要内容,如果未能解决你的问题,请参考以下文章
Python基础(12)_python模块之sys模块logging模块序列化json模块pickle模块shelve模块
Python 入门之 内置模块 -- 序列化模块(json模块pickle模块)