Python序列化和反序列化Json、Pickle

Python用于序列化的两个模块

  • json: 可用在不同语言之间交换数据,Python中用于字符串和python数据类型间进行转换。
  • pickle:只用于python特有的类型和python的数据类型间进行转换。

json模块四个方法:dumps、dump、loads、load

json.dumps(): 对json进行序列化,把数据类型转换成字符串。
json.dump():对json进行序列化, 把数据类型转换成字符串,并存储在文件中。
json.loads(): 进行反序列化,把字符串转换成数据类型 。
json.load(): 把文件打开并进行反序列化,从字符串转换成数据类型。

import json


dict1 = {"张三": 14, "李四": 15, "王五": 16}
dict2 = json.dumps(dict1)
print(dict2)
#结果:'{"\u5f20\u4e09": 14, "\u674e\u56db": 15, "\u738b\u4e94": 16}'

dict3 = json.loads(dict2)
print(dict3)
#结果:{'张三': 14, '李四': 15, '王五': 16}

with open('../test', 'w', encoding='utf8') as file:
    json.dump(dict1, file)
#结果在父级目录下的test中写入:'{"\u5f20\u4e09": 14, "\u674e\u56db": 15, "\u738b\u4e94": 16}'

with open('../test', 'r', encoding='utf8') as file2:
    dict4 = json.load(file2)
print(dict4)
#结果:{'张三': 14, '李四': 15, '王五': 16}

pickle模块四个方法:dumps、dump、loads、load

pickle.dumps(): 对对象进行序列化,把对象转换成字节型。
pickle.dump():对对象进行序列化, 把对象转换成字节型,并存储在文件中。
pickle.loads(): 进行反序列化,把字节型转换成对象本身 。
pickle.load(): 把文件打开并进行反序列化,从字节型转换对象本身。

import pickle


dict1 = {"张三": 14, "李四": 15, "王五": 16}
dict2 = pickle.dumps(dict1)
print(dict2)
#结果:b'\x80\x04\x95&\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x06\xe5\xbc\xa0\xe4\xb8\x89\x94K\x0e\x8c\x06\xe6\x9d\x8e\xe5\x9b\x9b\x94K\x0f\x8c\x06\xe7\x8e\x8b\xe4\xba\x94\x94K\x10u.'
print(type(dict2))
#结果:<class 'bytes'>

dict3 = pickle.loads(dict2)
print(dict3)
#结果:{'张三': 14, '李四': 15, '王五': 16}

with open(r'../test.txt', 'wb') as file:
    pickle.dump(dict1, file)

with open('../test', 'rb') as file2:
    dict4 = pickle.load(file2)
print(dict4)
#结果:{'张三': 14, '李四': 15, '王五': 16}

拓展

  • json是可以在不同语言之间交换数据的,pickle只在python之间使用
  • json只能序列化最基本的数据类型,josn只能把常用的数据类型序列化(列表、字典、列表、字符串、数字等),比如日期格式、类对象等对象时json就不行了
  • pickle可以序列化所有的数据类型,包括类,函数都可以序列化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值