序列化pickle模块
1.pickle模块
pickle.dumps() 和pickle.loads()
import pickle f = open('112.pkl','w') a = {'name':2,2:3,3:4,4:5} print(pickle.dumps(a),type(pickle.dumps(a)))
import pickle a = {'name':2,2:3,3:4,4:5} b = pickle.dumps(a) print(pickle.loads(b))
pickle.dump() 和pickle.load() 这里和json的区别在于pickle直接转换成字节(bytes),json直接转换成字符串。pickle应用wb,rb这些打开二进制文件。
import pickle f = open('112.pkl','wb') a = {'name':2,2:3,3:4,4:5} b = pickle.dump(a,f) print(b,type(b))
import pickle f = open('112.pkl','rb') b = pickle.load(f) print(b)
2.那么json和pickle这么相似,到底为什么还要存在两个类型差不多的模块?
①·因为json模块只能用于str,dict,tuple,list,int.只能将这些数据类型转换成字符串。
而pickle可以将所有的数据类型转换为字符串,包括函数(下面有举例)
②·但是json模块可以用于跨语言传递字符串,而pickle只能在python里使用,语言局限性大。
用json转换函数,报错函数不可序列化。
import pickle,json def sayhi(): print("hello world") f = open('113.json','w') a = json.dump(sayhi,f) # TypeError: Object of type 'function' is not JSON serializable
用pickle转换函数,不会报错
import pickle,json def sayhi(): print("hello world") f = open('113.json','wb') a = pickle.dump(sayhi,f)
越是困难的事越要立即去做,这样收益才会最大!!!