1. 序列化:把内存的一些数据对象存到硬盘。数据对象是一些基本数据类型,如list dict,set等。
2. 反序列化:将硬盘的内容加载成原来的数据对象。
3. 为什么要用序列化与反序列化:当你想把一个数据暂时保存起来而过会又要用的时候,就可以把它先保存到硬盘,保证安全性。需要时在取出来。
4. json序列化
一般将内存数据对象存到硬盘上的方法如下: 文件只能存字符串或二进制
person={"name":'hy', "age":18} f=open("test.text","w") f.write(str(person)) f.close f=open("test.text","r") data=eval(f.read()) f.close print(data['name'])
而json序列化的方法如下:
import json #json序列化 person={"name":'hy', "age":18} f=open("test.text","w") f.write(json.dumps(person)) #json.dumps()将基本数据类型转为str f.close() #json 反序列化 f=open("test.text","r") data=json.loads(f.read()) #json.loads()将字符串转为基本数据类型 print(data['age'])
json序列化只支持简单的数据转化。
5. pickle序列化可对函数进行序列化。如下:
def hello(name): print("hello world",name) import pickle person={"name":'hy', "age":18, "func":hello, } f=open("test.text","wb") f.write(pickle.dumps(person)) #pickle.dumps()将数据类型转为str f.close() #pickle 反序列化 f=open("test.text","rb") data=pickle.loads(f.read()) #pickle.loads()将字符串转为数据类型 print(data['age']) print(data["func"]("hhy")) f.close()
函数序列化的是整个函数对象非函数名地址。Pickle序列化只存在在Python语言。而json与其他语言几乎通用。
此外:
f.write(pickle.dumps(person)) #等价于 pickle.dump(person,f) data=pickle.loads(f.read()) #等价于data=pickle.load(f)