序列化:
把对象或变量从内存中编程可存储或传输的过程叫做序列化
反序列化:
把变量内容从序列化的对象重新读到内存中称之为反序列化
把一个对象(字典、列表、函数等)写入到一个文件的动作就叫做序列化,但直接写入就报如下错误:
1 dic={"name":"Adair","age":"18"} 2 3 f=open("serialization",'w') 4 f.write(dic) 5 f.close()
TypeError: write() argument must be str, not dict #文件写入时必须是字符串,不能是字典
神不神奇~ 不过,不打紧,python封装了json模块专门解决这个神奇。
json:
与xml协议一样,是各个语言之间通信的桥梁
json 序列化:
1 import json 2 3 dic={"name":"Adair","age":"18"} 4 f=open("Json_Dump",'w') 5 Json_Dump=json.dumps(dic) 6 f.write(Json_Dump) 7 f.close()
还有一种简单的方法:
1 import json 2 dic={"name":"Adair","age":"18"} 3 f=open("Json_Dump",'w') 4 json.dump(dic,f)
json反序列化:
1 import json 2 3 f=open("Json_Dump",'r') 4 print(json.loads(f.read())["name"]) 5 f.close()
他也有一种简单的写法,开不开心:
1 f=open("Json_Dump",'r') 2 print(json.load(f)["name"]) 3 f.close()
json的缺点就是不能序列化函数,不过一般也不会序列化函数,顺带记下吧:
pickle:
1 import pickle 2 def Printf(): 3 print("hello Adair") 4 f=open("Pickle",'wb') 5 pickle.dump(Printf,f)
1 import pickle 2 def Printf(): 3 print("hello Adair") 4 f=open("Pickle",'rb') 5 pickle.load(f)()
写入读入时需要使用二进制(wb)的方式写入,pickle的方式更json一样,唯一的区别就是json序列化后内容可以肉眼可以识别,而pickle是以二进制的方式写入的,肉眼不能识别。