python的序列化和反序列化问题主要涉及两个模块:pickle,json
Pickle
翻阅手册
模块 pickle实现了对一个 Python 对象结构的二进制序列化和反序列化。 “pickling” 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 “unpickling” 是相反的操作,会将(来自一个 binary file 或者 bytes-like object的)字节流转化回一个对象层次结构。 pickling(和 unpickling)也被称为“序列化”, “编组” 或者 “平面化”。而为了避免混乱,此处采用术语 “封存 (pickling)” 和 “解封 (unpickling)”。
特点
- pickle所使用的数据格式仅可用于 Python
- pickle格式使用二进制存储
- 存储之后人类不可读
- 存在风险
方法
pickle.dump
将对象序列化(即封存)并写入已打开的文件中。
示例:
1 | import pickle |
pickle.dumps
将对象序列化
示例:
1 | import pickle |
pickle.load
从文件中读取序列化字符串并反序列化
示例:
1 | import pickle |
pickle.loads
将序列化字符串反序列化
示例:
1 | import pickle |
Json
JSON (JavaScript Object Notation),是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式,尽管它不仅仅是一个严格意义上的 JavaScript 的字集 。
JSON序列化:将Python内置的数据类型序列化为JSON格式,用来数据存储或数据交换。
特点
- 人类可读
- 采用文本序列化格式,输出 unicode 文本
- 可互操作,在Python系统之外广泛使用
- 相比pickle较为安全
方法
方法名和pickle相同,但主要是类型的转换
json.dumps
将dict类型的数据转成str
示例:
1 | import json |
json.dump
将dict类型的数据转换类型,并写入到json文件中
示例:
1 | import json |
写入前需先dumps转换成类型,直接存入会报错
json.loads
将str类型的数据转成dict
示例:
1 | import json |
json.load
从文件中读取数据,将str类型的数据转成dict
示例:
1 | import json |