🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 序列化 ## pickle 把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等 把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling ```python import pickle # pickling d = dict(name='Bob', age=20, score=88) pickle.dumps(d) # b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00Bobq\x02X\x03\x00\x00\x00ageq\x03K\x14X\x05\x00\x00\x00scoreq\x04KXu.' f = open('dump.txt', 'wb') pickle.dump(d, f) # 写进文件 f.close() # unpickling f = open('dump.txt', 'rb') d = pickle.load(f) f.close() d # {'name': 'Bob', 'age': 20, 'score': 88} ``` ## JSON ```python import json d = dict(name='Bob', age=20, score=88) json.loads(json.dumps(d)) # {'name': 'Bob', 'age': 20, 'score': 88} class Student(object): def __init__(self, name, age, score): self.name = name self.age = age self.score = score s = Student('Bob', 20, 88) json_str = json.dumps(s, default=lambda obj: obj.__dict__) # 因为通常class的实例都有一个__dict__属性,它就是一个dict,用来存储实例变量。所以我们可以偷个懒,把任意class的实例变为dict # 反json def dict2student(d): return Student(d['name'], d['age'], d['score']) print(json.loads(json_str, object_hook=dict2student)) ```