json&pickle数据序列化
json 用于字符串和python数据类型间进行转换
pickle 用于python特有的类型 和 python的数据类型间进行转换
序列化:把字典或者字符串的内存对象 存到硬盘上;
反序列化:就是从硬盘上加载出来
json序列化与反序列化
序列化:把字典或者字符串的内存对象 存到硬盘上;
import json
info = {
"name" : "aaa",
"age" : 22
}
f = open("test.text","w",encoding="utf-8")
f.write(json.dumps(info))
f.close()
反序列化:就是从硬盘上加载出来
import json
f = open("test.text","r")
data = json.loads(f.read())
print(data["age"])
print(data)
f.close()
pickle序列化和反序列化
序列化:把字典或者字符串的内存对象 存到硬盘上;
import pickle
#此函数再这里没有实际意义,接着往下看
def sayhi(name):
print("hello,",name)
info = {
"name" : "bbb",
"age" : 33
}
f = open("text2.text","wb")
f.write(pickle.dumps(info))
f.close()
反序列化:就是从硬盘上加载出来
import pickle
f = open("text2.text","rb")
def sayhi(name):
print("hello22,", name)
data = pickle.loads(f.read())
print(data) #结果是{'name': 'bbb', 'age': 33}
print(data["age"]) #结果是33
#运行sayhi 函数,查看显示结果,这里只是表现了一种写代码的方式。
sayhi(data["name"]) #结果是hello22, bbb
f.close()
pickle序列化2
上边的pickle序列化可以写成:
import pickle
def sayhi(name):
print("hello,",name)
info = {
"name" : "aaa",
"age" : 22,
"aaa" :sayhi
}
f = open("text2.text","wb")
pickle.dump(info,f) # 完全相同f.write(pickle.dumps(info))
f.close()
#反序列化:就是从硬盘上加载出来
import pickle
f = open("text2.text","rb")
data = pickle.load(f)
print(data)
print(data["age"])
sayhi("name")
f.close()
json多次dumps和多次loads
序列化:把字典或者字符串的内存对象 存到硬盘上;
import json
info = {
"name" : "aaa",
"age" : 22
}
f = open("test01.text","w")
f.write(json.dumps(info))
info["age"] = 30
f.write(json.dumps(info))
f.close()
'''
test01.text内容如下:
{"name": "aaa", "age": 22}{"name": "aaa", "age": 30}
'''
反序列化:就是从硬盘上加载出来 ,在这里loads的时候会报错。
import json
f = open("test01.text","r")
data = json.loads(f.read())
print(data["age"])
f.close()
当学序列化只dumps一次,在loads就正确了
序列化
import json
info = {
"name" : "aaa",
"age" : 22
}
f = open("test01.text","w")
#f.write(json.dumps(info))
info["age"] = 30
f.write(json.dumps(info))
f.close()
#反序列化
import json
f = open("test01.text","r")
data = json.loads(f.read())
print(data["age"]) #结果是:30
f.close()
''' 总结: json可以dumps多次,loads的时候报错;同时也不可以loads多次; 要想loads多次,就在dumps的时候dumps成不同的文件,laods不同文件。 '''
pickle多次dumps和多次loads
序列化
import pickle
info = {
"name" : "aaa",
"age" : 22
}
f = open("test001.text","wb")
f.write(pickle.dumps(info))
info["age"] = 30
f.write(pickle.dumps(info))
f.close()
反序列化
f = open("test001.text","rb")
data = pickle.loads(f.read())
print(data["age"]) #结果是:22
f.close()
''' 总结: pickle可以dumps多次,loads的时候不报错,但得出的结果是第一次dumps的内容;同时也不可以loads多次; 要想loads多次,就在dumps的时候dumps成不同的文件,laods不同文件。 '''
总结:
json 用于字符串和python数据类型间进行转换
pickle 用于python特有的类型 和 python的数据类型间进行转换
序列化:把字典或者字符串的内存对象 存到硬盘上;
反序列化:就是从硬盘上加载出来
当json dumps多次的时候,loads的时候报错;同时也不可以loads多次;
要想loads多次,就在dumps的时候dumps成不同的文件,laods不同文件。
当pickle dumps多次的时候,loads的时候不报错,但得出的结果是第一次dumps的内容;同时也不可以loads多次;
要想loads多次,就在dumps的时候dumps成不同的文件,laods不同文件。