内置 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.56 | int 或 float |
true/false | True/False |
null | None |
序列化保留到文件:
>>> 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 json
class Student(object):
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
s = 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))