使用总结:
- pickle保存成二进制序列,json保存成json格式的可读文本,显然json文件可读性更强;
- pickle保存的对象只能用于python,且不同版本可能不通用;
- pickle用来载入自定义的类实例时,必须先导入相应类型;
- dump、load用来操作文件流,dumps、loads用来操作对象
- pickle操作文件时,要以’b’二进制打开文件;
- json本身有自己定义的一些数据格式,所以存储时需要确保存储对象在json中有对应的类型
json使用时参照以下的对应表,如果想要序列化的数据类型不在这些里面,则保存时会报错
| json | python |
|---|---|
| object | dict |
| array | list |
| string | str |
| number (int) | int |
| number (real) | float |
| true | True |
| false | False |
| null | None |
顺便,以下语句可以用来判断对象类型,他会返回一个bool量
isinstance(obj, str)
isinstance(obj, np.ndarray) # 对于导入库中的类型
json用法
import json
d = dict{"a": 1, "b": [1,2,3]}
# json对象
obj = json.dumps(d) # 将d序列化保存在obj中
dd = json.loads(obj) # 将obj反序列化为python对象
# 文件
fr = open("tmp.json", 'w')
json.dump(d, fr) # 保存到文件
fr.close()
fr = open("tmp.json", 'r')
dd = json.load(fr) # 读取文件
fr.close()
pickle 用法
import pickle
obj = pickle.dumps(d) # 将d保存成字节流
dd = pickle.loads(obj) # 将字节流解析python对象
# 文件
fr = open("tmp.json", 'wb')
pickle.dump(d, fr) # 保存到文件
fr.close()
fr = open("tmp.json", 'rb')
dd = pickle.load(fr) # 读取文件
fr.close()
本文总结了Python中pickle和json两种序列化方式的使用。pickle将对象保存为二进制,适合内部使用,但不同Python版本间可能不兼容;json保存为可读文本,具有良好的跨平台和语言兼容性,但需确保对象类型符合json格式。在使用pickle时要注意以二进制模式打开文件,而json则需注意对象类型与json类型的对应。
163

被折叠的 条评论
为什么被折叠?



