zoukankan      html  css  js  c++  java
  • python,序列化

    序列化:

    变量从内存中变成可存储或传输的过程

    在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等

    反序列化(unpickling):

    变量内容从序列化的对象重新读到内存里

    import pickle
    d = dict(name='Bob', age=20, score=88)
    pickle.dumps(d)
    #结果
    b'x80x03}qx00(Xx03x00x00x00ageqx01Kx14Xx05x00x00x00scoreqx02KXXx04x00x00x00nameqx03Xx03x00x00x00Bobqx04u.'
    
    '''pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件。
    或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object'''
    f = open('dump.txt', 'wb')
    pickle.dump(d, f)
    f.close()
    
    #反序列化,pickle.loads()/load()
     f = open('dump.txt', 'rb')
    d = pickle.load(f)
    f.close()
    d
    {'age': 20, 'score': 88, 'name': 'Bob'}

     若在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便

    JSON

    Python内置的json模块提供了非常完善的Python对象到JSON格式的转换

    #str与JSON的字符串之间转换
    
    import json
    d = dict(name='Bob', age=20, score=88)
    json.dumps(d)
    #方法返回一个str
    '{"age": 20, "score": 88, "name": "Bob
    #反序列化
    json.loads(json_str)
    {'age': 20, 'score': 88, 'name': 'Bob'}

    类的处理

    import json
    
    d = dict(name='Bob', age=20, score=88)
    data = json.dumps(d)
    print('JSON Data is a str:', data)
    reborn = json.loads(data)
    print(reborn)
    
    class Student(object):
    
        def __init__(self, name, age, score):
            self.name = name
            self.age = age
            self.score = score
    
        def __str__(self):
            return 'Student object (%s, %s, %s)' % (self.name, self.age, self.score)
    
    s = Student('Bob', 20, 88)
    std_data = json.dumps(s, default=lambda obj: obj.__dict__)
    print('Dump Student:', std_data)
    rebuild = json.loads(std_data, object_hook=lambda d: Student(d['name'], d['age'], d['score']))
    print(rebuild)
  • 相关阅读:
    娓娓道来c指针 (4)解析c的声明语句
    Snail—UI学习之UITextField
    E
    Qt录音机
    著名的英文搜索引擎
    java中Map,List与Set的差别
    Android图片处理:识别图像方向并显示
    Unity3D中组件事件函数的运行顺序
    Android屏幕density, dip等相关概念总结
    Codeforces Round #257 (Div. 2)
  • 原文地址:https://www.cnblogs.com/xiexiaoxiao/p/7082853.html
Copyright © 2011-2022 走看看