序列化
序列化是将内存对象,转换为可以存储或传输的形式的过程,可以实现不同开发语言或系统之间的信息交互。
json
第一种是json。通过dumps()序列化,将python中的简单数据类型,转化成可传输的数据。在通过load()反序列化,将传输过来的数据恢复成简单的数据类型,然后使用。
import json
f= open("source/xuliehua.txt","w")
a = {"name":"wty","height":175}
print("========序列化=======")
print(json.dumps(a)) # 序列化方法
f.write(json.dumps(a))
f.close()
f1= open("source/xuliehua.txt","r")
print("========反序列化=======")
data = json.loads(f1.readline()) # 反序列化方法
print(data["name"])
如果复杂的数据类型会需要序列,定义一个方法change()也用json序列化。会抛出一个异常,方法的内存地址不可以用json序列化
import json
def change(name):
print(name)
f= open("source/xuliehua.txt","w")
a = {"name":"wty","height":175,"func":change} # 加入change方法
print("========序列化=======")
print(json.dumps(a)) # 序列化方法
f.write(json.dumps(a))
f.close()
#输出 TypeError: <function change at 0x0000027DE6B14510> is not JSON serializable
pickle
第二种pickle,pickle的方法跟json使用的方法是一样的。但是pickle能对复杂的数据类型进行序列化。
import pickle
def change(name):
print(name)
f= open("source/xuliehua.txt","wb")
print("========序列化=======")
a = {"name":"wty","height":175,"func":change}
print(pickle.dumps(a))
f.write(pickle.dumps(a))
# pickle.dump(a,f) 简写方法。与上面两行效果一样
print("========反序列化=======")
f.close()
f1= open("source/xuliehua.txt","rb")
data = pickle.loads(f1.read())
# data = pickle.load(f1) 简写方法。与上面两行效果一样
print(data["name"])
data["func"]("apple") # 反序列化后,调用方法
#========序列化=======
#b'\x80\x03}q\x00(X\x04\x00\x00\x00funcq\x01c__main__\nchange\nq\x02X\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00wtyq\x04X\x06\x00\x00\x00heightq\x05K\xafu.'
#========反序列化=======
#wty
#apple