序列化:
把对象或变量从内存中编程可存储或传输的过程叫做序列化
反序列化:
把变量内容从序列化的对象重新读到内存中称之为反序列化
把一个对象(字典、列表、函数等)写入到一个文件的动作就叫做序列化,但直接写入就报如下错误:
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 json2 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 json2 dic={ "name":"Adair","age":"18"}3 f=open("Json_Dump",'w')4 json.dump(dic,f)
json反序列化:
1 import json2 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 pickle2 def Printf():3 print("hello Adair")4 f=open("Pickle",'wb')5 pickle.dump(Printf,f)
1 import pickle2 def Printf():3 print("hello Adair")4 f=open("Pickle",'rb')5 pickle.load(f)()
写入读入时需要使用二进制(wb)的方式写入,pickle的方式更json一样,唯一的区别就是json序列化后内容可以肉眼可以识别,而pickle是以二进制的方式写入的,肉眼不能识别。