python序列化保存对象——pickle和json

本文总结了Python中pickle和json两种序列化方式的使用。pickle将对象保存为二进制,适合内部使用,但不同Python版本间可能不兼容;json保存为可读文本,具有良好的跨平台和语言兼容性,但需确保对象类型符合json格式。在使用pickle时要注意以二进制模式打开文件,而json则需注意对象类型与json类型的对应。

使用总结

  • pickle保存成二进制序列,json保存成json格式的可读文本,显然json文件可读性更强;
  • pickle保存的对象只能用于python,且不同版本可能不通用;
  • pickle用来载入自定义的类实例时,必须先导入相应类型;
  • dump、load用来操作文件流,dumps、loads用来操作对象
  • pickle操作文件时,要以’b’二进制打开文件;
  • json本身有自己定义的一些数据格式,所以存储时需要确保存储对象在json中有对应的类型
    json使用时参照以下的对应表,如果想要序列化的数据类型不在这些里面,则保存时会报错
jsonpython
objectdict
arraylist
stringstr
number (int)int
number (real)float
trueTrue
falseFalse
nullNone

顺便,以下语句可以用来判断对象类型,他会返回一个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中json模块文档
python中json模块文档

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值