美文网首页
序列化与反序列化

序列化与反序列化

作者: 海洋之心_ | 来源:发表于2016-09-03 22:23 被阅读0次

    基本概念

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

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

    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)
    

    相关文章

      网友评论

          本文标题:序列化与反序列化

          本文链接:https://www.haomeiwen.com/subject/yhqlettx.html