首页 > 其他 > 详细

序列化与反序列化常用的三个模块

时间:2019-05-18 15:54:23      阅读:108      评论:0      收藏:0      [点我收藏+]
print(‘序列化模块‘)
‘‘‘
什么是序列化?
将对象转化为字符串
什么是反序列化?
将字符串转化为对象
为什么要序列化?
数据的存储和传输都采用的是字符串类型

序列化的模块?
json pickle shevle

json :支持跨语言,用于数据的传输
pickle:支持python的所有数据类型,所以可以将所有python的对象序列化后存储
shelve:支持python的所有数据类型,可以即时存与取,


序列化:
dump 这个功能更强一些
dumps
反序列化
load 这个功能更强一些
loads

下面分开介绍着三个序列化模块

一.json 模块(优势,用于传输,支持多语言,跨平台)
什么是json?
就是完成文本序列化得到文本字符串,json字符串具有一定的语法规范

1,支持的数据类型:int float str bool dict list null
2,复杂的json数据都是有{}和[]嵌套形成的数据,也就是字典和列表嵌套形成
3,json 字符串只能有一个根,不能有两个或者多个
4,json中的str类型必须用双引号包裹,不支持单引号 三引号

import json
##python 对象,序列化然后变成了json字符串
date = ‘ ‘
res = json.dumps(date)
print(res,type(res))
##json字符串反序列化 得到python对象
res2 = json.loads(res)
print(res2,type(res2))

json_str1 ="1.223"
json_str2 ="false"
json_str3 ="[]{}"####json 字符串只能有一个根,这种情况下有两个不同数据类型的根
json_str4 ="[][]"####这种情况下,只有一种数据类型,但是有两个,有两个根,也会出错,只能有一个
json_str5 ="[[],[]]"####这种情况下,只两个列表,被一个列表包起来,嵌套起来,变成一个大的列表,这种情况下就不会报错
json_str6 = "123"
obj = json.loads(json_str6)
print(obj,type(obj))


操作文件

#序列化
import json

obj = {‘name‘:‘szp‘,‘age‘:24,‘gender‘:‘男‘}
with open(‘a.txt‘,‘w‘,encoding=‘utf-8‘) as wf:
# json.dump(obj,wf)
json.dump(obj,wf,ensure_ascii= False)
##有中文的时候,就将这个ensure_ascii的值修改成False,
# 系统默认的编码是ASCII码,改成FALSE之后,这个默认的代码就会取消,
##采用和现在文本打开的编译一样的编码 也就是UTF-8编码,
##注意只有有中文的时候我们才需要这样设置,没有中文的时候可以不必设置

##反序列化
with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as rf:
user_dic = json.load(rf)
print(user_dic,type(user_dic))
pass
"注意:json模块的序列化与反序列化是一一对应关系"


可以把json 模块理解成一种中间的协议




二.pickle模块:支持所有数据类型
不能支持跨语言跨平台
import pickle
##序列化
obj = {‘name‘:‘szp‘,‘age‘:24,‘gender‘:‘男‘}
res = pickle.dumps(obj)
print(res)

pickle.dump(res,open(‘b.txt‘,‘wb‘))

##反序列化

print(pickle.loads(res))
# print(pickle.load(res))####这个时候不带s是会出错的
###序列化的时候带S反序列化的时候不带s




三.shelve:支持所有的数据类型,即使存取
json 主要用于传输,pickle主要用于内部的存贮,
shelve 主要用于优化存取,存取更快.
这个用的比较少,所以在这里就不详细介绍,
在今后的学习中,三个序列化其实用的都不是很多,我们的数据都是直接存储到数据库中
压根不需要进行序列化和反序列化,
对于我们普通用户的需求,只需要掌握json和pickle这两个模块的dumps 和load 这连个模块的使用就好了.


序列化与反序列化常用的三个模块

原文:https://www.cnblogs.com/1832921tongjieducn/p/10885870.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!