Json
Json是能跨语言序列化数据,也就是说在python中Json序列化的数据放到Java同样可用,序列化的意思就是能按字典、列表等python数据的格式转换成字符串存储在内存中(内存只能按字节或者二进制形式的存储)。Json只能序列化简单的数据,例如:列表、字典、集合等数据格式,函数就不能进行序列化。
序列化举例说明:
import json
#json只能处理简单的数据,例如列表、字典、集合之类的,它是一种夸语言之间的交互式
info={
'name':'Jorocco',
'age':23,
}
f=open("test.txt","w")#文件只能存字符串,把对象转成字符串就是序列化
f.write(json.dumps(info))#通过此方法将数据进行序列化
json.dump(info,f)#与上面的方法完全等同
#f.write(str(info))#要是不通过Json方法,就只能通过此方法
f.close()
有序列化,就有反序列化,反序列化就是将字符串转成python特定的格式。
反序列化举例说明:
import json
f=open("test.txt","r")
data=json.loads(f.read())#反序列方法
data=json.load(f)#完全等同于上面的反序列化
print(data)
pickle
pickle,用于python所有的类型 和 python的数据类型间进行转换,相比Json,它能转换比如函数类型。
pickle序列化举例说明
import pickle
def sayhi(name):
print("hello,",name)
print("hello2")
info={
'name':'Jorocco',
'age':23,
'func':sayhi#pickle可以序列化python所有的数据类型,只需要将函数的地址传递进来,但是反序列化的时候则会报错,因为该地址随着此程序的运行结束就被回收了
}
f=open("test.txt","wb")#pickle存储的是二进制文件,所以写入的时候为'wb'
f.write(pickle.dumps(info))#通过此方法将数据进行序列化
#pickle.dump(info,f) #等同于f.write(pickle.dumps(info))
f.close()
pickle反序列化举例说明
import pickle
def sayhi(name):
print("hello,",name)
f=open("test.txt",'rb')
data=pickle.loads(f.read())#如果就这样的话,会报错,因为序列化了一个函数,它的地址随着序列化程序的运行结束就被回收了
pickle.load(f)#和上面的效果一样
#但是当我们加了上面的那个和序列化函数的名称一样的函数时,就可以反序列化了,即使功能不同
print(data['func']("Jorocco"))
注意:在python3中可以序列化多次,但只能反序列化一次,因此,序列化了多次,反序列化的时候就会出错,所以我们都只序列化一个文件,反序列化一个文件,如果实在要进行序列化多次,那就序列化成多个文件。