json & pickle数据序列化

序列化:把内存中的数据对象变成字符串

info = {
    'name':'tom',
    'age':22
}

f = open("test.txt","w")
f.write(str(info))
f.close()

反序列化:从硬盘中把数据加载到内存

f = open("test.txt","r")

data = eval(f.read())
f.close()
print(data['age'])

json方式

import json

info = {
    'name':'tom',
    'age':22
}

f = open("test.txt","w")
f.write(json.dumps(info))
f.close()
import json

f = open("test.txt","r")

data = json.loads(f.read())
print(data["age"])

json只能处理字典,列表,字符串等简单的数据类型,因为json适用于不同语言的数据交互,每种语言都有这些基本的数据类型,只能处理这些简单的

pickle可以处理复杂的数据类型,如函数,类,但是不能跨语言,只能用于python

import pickle

def sayhi(name):
    print('hello,',name)

info = {
    'name':'tom',
    'age':'22',
    'func':'sayhi'
}

f = open("test.txt","wb")
f.write(pickle.dumps(info))
f.close()
import pickle

def sayhi(name):     # 需要再把函数拷贝到这里来,运行结果才不会出过错,上面的代码把内存地址序列化到文件中,反序列化的时候,就没有内存地址了,因为sayhi函数的内存地址伴随着程序执行完后,内存地址就被释放掉了,这个函数对象就找不到了,所以也就无法重新导入了,会报错
    print('hello,',name)

f=open("test.txt","rb")

data=pickle.loads(f.read())
print(data["func"]("tom"))
原文地址:https://www.cnblogs.com/Ryans-World/p/7275172.html