内置 Pickle 序列化

序列化保留到文件:

>>> import pickle>>> d = dict(name='Bob', age=20, score=88)>>> pickle.dumps(d)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.'>>> f = open('dump.txt', 'wb')>>> pickle.dump(d, f)>>> f.close()

反序列化:

>>> f = open('dump.txt', 'rb')>>> d = pickle.load(f)>>> f.close()>>> d{'age': 20, 'score': 88, 'name': 'Bob'}
注:不同版本的Python序列化的内容可能不兼容,倡议用Pickle序列化只保留不重要的数据

JSON 序列化

JSON类型Python类型
{}dict
[]list
"string"str
1234.56int或float
true/falseTrue/False
nullNone

序列化保留到文件:

>>> import json>>> d = dict(name='Bob', age=20, score=88)>>> json.dumps(d)'{"age": 20, "score": 88, "name": "Bob"}'>>> f = open('dump.txt', 'wb')>>> json.dump(d, f)>>> f.close()

序列化不本义中文字符:

obj = dict(name='小明', age=20)s = json.dumps(obj, ensure_ascii=False)

反序列化:

>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'>>> d = json.loads(json_str)>>> d{'age': 20, 'score': 88, 'name': 'Bob'}

序列化类对象:

import jsonclass Student(object):    def __init__(self, name, age, score):        self.name = name        self.age = age        self.score = scores = Student('Bob', 20, 88)print(json.dumps(s, default=lambda obj: obj.__dict__))

反序列化类对象:

def dict2student(d):    return Student(d['name'], d['age'], d['score'])json_str = '{"age": 20, "score": 88, "name": "Bob"}'print(json.loads(json_str, object_hook=dict2student))