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

来源:互联网 发布:二次元轻小说软件 编辑:程序博客网 时间:2024/06/06 01:56

简介

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

用于序列化的两个模块

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

常用:
1. json
2. pickle

json

序列化

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

这里写图片描述

反序列化

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

这里写图片描述

相互转换

import requestsimport jsonr = 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 requestsimport jsonr = 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 requestsimport jsonr = 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 picklelist = [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 picklelist = [1,2,3,4]pickle.dump(list,open('db','wb'))

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

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

这里写图片描述

优势

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

劣势

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

原创粉丝点击