序列化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)

  

  

  

  

posted @ 2018-04-17 10:40  Roc_Atlantis  阅读(188)  评论(0编辑  收藏  举报