序列化与反序列化

基本概念

什么是序列化,什么是反序列化?

序列化:变量从内存中变成可存储或传输的过程称之为序列化
反序列化:变量内容从序列化的对象重新读到内存里称之为反序列化

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)

你可能感兴趣的:(序列化与反序列化)