Python序列化与反序列化——json和pickle

简介

序列化:将Python里的基本类型如字典、列表、数组等序列化为字符串
反序列化:将字符串反序列化为Python里的基本类型如字典、列表等

用于序列化的两个模块

json,用于字符串 和 python数据类型间进行转换
pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load

常用:
1. json
2. pickle

json

序列化

import json

dic = {'Name':'Alex'}
result = json.dumps(dic)
print(dic,type(dic))
print(result,type(result))

这里写图片描述

反序列化

import json

s = '{"Name":"Alex"}'
print(s,type(s))
ret = json.loads(s)
print(ret,type(ret))

这里写图片描述

相互转换

import requests
import json

r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=杭州')
r.encoding = 'utf-8'
print(r.text)
print()

dic = json.loads(r.text)
print(dic,type(dic))

这里写图片描述

dump 与 load

dump 的功能,将序列化的内容写入文件:

import requests
import json

r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=杭州')
r.encoding = 'utf-8'
print(r.text)
print()

dic = json.loads(r.text)
print(dic,type(dic))

json.dump(dic,open('db','w',encoding='utf-8'))#将序列化的内容写入文件

这里写图片描述

load 的功能,将文件读入,反序列化:

import requests
import json

r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=杭州')
r.encoding = 'utf-8'
print(r.text)
print()

dic = json.loads(r.text)
print(dic,type(dic))

ret = json.load(open('db','r',encoding='utf-8'))#将读入文件,反序列化为Python类型数据
print(ret)

这里写图片描述

优势

跨语言操作,基于字符串类型,适用范围广。

劣势

只有基础的几种类型:

+——————-+—————+
| Python | JSON |
+===================+===============+
| dict | object |
+——————-+—————+
| list, tuple | array |
+——————-+—————+
| str | string |
+——————-+—————+
| int, float | number |
+——————-+—————+
| True | true |
+——————-+—————+
| False | false |
+——————-+—————+
| None | null |
+——————-+—————+

pickle

pickle只能Python用,其他语言不能用,同样有dumps、loads,但是编码格式只有Python读得懂。但是,如果写了个类class,用json的dumps时会失败,因为json试用范围为以上几种。

序列化

import pickle
list = [1,2,3,4]
ret = pickle.dumps(list)
print(ret)
print(type(ret))

这里写图片描述

反序列化

new_list = pickle.loads(ret)
print(new_list)

这里写图片描述

dump 与 load

dump 的功能,将序列化的字节byte内容写入文件:

import pickle

list = [1,2,3,4]
pickle.dump(list,open('db','wb'))

这里写图片描述
load 的功能,将文件读入,反序列化:

import pickle


list = pickle.load(open('db','rb'))
print(list)

这里写图片描述

优势

对所有类型,特别是复杂类型进行序列化操作,像面向对象的类。

劣势

仅适用于Python语言的应用,如Python游戏的读档、存档操作。Python版本间反序列化有问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何以问天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值