基本概念
什么是序列化,什么是反序列化?
序列化:变量从内存中变成可存储或传输的过程称之为序列化
反序列化:变量内容从序列化的对象重新读到内存里称之为反序列化
pickle模块使用
序列化
(一)序列化字典(dumps方法)
import pickle
d = dict(name='bob',age=14,score=15)
pickle.dumps(d) #dumps()把任意对象序列化成为一个bytes
打印成为:b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'
(二)序列化直接写入文件(dump方法)
import pickle
d = dict(name='bob',age=14,score=15)
f = open('dump.txt','wb')
pickle.dump(d,f)#序列化以后直接写入f即file-like Object里
f.close()
反序列化
(一)反序列化(loads方法)
import pickle
f = open('dump.txt','rb')
pickle.loads(f.read())# 读出这一个bytes
f.close()
(二)反序列化(load方法)
import pickle
f = open('dump','rb')
pickle.load(f)#load()里传入的是file-like Object 对象
f.close()
tips:
pickle适用范围:用于同一版本的Python
通用的json:一种标准格式
json模块的使用
(一)json的dumps和loads方法
dumps
import json
d = dict(name='bob',age=14,score=15)
json.dumps(d)
loads
import json
json_str = '{"age": 20, "score": 88, "name": "Bob"}'
json.loads(d)#file-like object就可以了
json模块进阶
序列化
利用类实例化来序列化json.dumps(s, default=实例化对象转换dict的方法)
复杂方法:包含原理
import json
class Student(object):
def __init__(self,name,age,score):
self.name = name
self.age = age
self.score = score
s = Student('bob',12,12)
def change(std):
return {
'name':std.name
'age':std.age
'score':std.score
}
print(json.dumps(s,default =change)
简单方法(利用实例化类的dict属性)
import json
class Student(object):
def __init__(self,name,age,score):
self.name = name
self.age = age
self.score = score
s = Student('bob',12,12)
json.dumps(s,default:lambda object : object.__dict__)#__dict__属性即是用来存实例化对象参数
反序列化
import json
json_str = '{"age": 20, "score": 88, "name": "Bob"}'
class Student(object):
def __init__(self,name,age,score):
self.name = name
self.age = age
self.score = score
def change(json_str):#字典转化为类的实例化
return Student(json_str['name'],json_str['age'],json_str['score']
json.loads(json_str,object_hook = change)