本文主要是介绍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 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 requests
import 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 requests
import 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 requests
import 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 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 picklelist = [1,2,3,4]
pickle.dump(list,open('db','wb'))
load 的功能,将文件读入,反序列化:
import picklelist = pickle.load(open('db','rb'))
print(list)
优势
对所有类型,特别是复杂类型进行序列化操作,像面向对象的类。
劣势
仅适用于Python语言的应用,如Python游戏的读档、存档操作。Python版本间反序列化有问题。
这篇关于Python序列化与反序列化——json和pickle的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!