没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Python之数据序列化(之数据序列化(json、、pickle、、shelve)详解)详解
主要介绍了Python之数据序列化(json、pickle、shelve)详解,文中通过示例代码介绍的非常详细,对大家的学
习或者工作具有一定的参考学习价值,需要的朋友可以参考下
什么是序列化什么是序列化
什么是序列化,把程序中的对象或者变量,从内存中转换为可存储或可传输的过程称为序列化。在 Python 中,这个过程称为
pickling,在其他语言中也被称为 serialization,marshalling,flattening 等。程序中的对象(或者变量)在序列化之后,就可
以直接存放到存储设备上,或者直接发送到网络上进行传输。
序列化的逆向过程,即为反序列化(unpickling),就是把序列化的对象(或者变量)重新读到内存中~
Python中序列化的模块中序列化的模块
模块名模块名
称称
描述描述 提供的提供的api
json 用于实现Python数据类型与通用(json)字符串之间的转换
dumps()、dump()、loads()、
load()
pickle 用于实现Python数据类型与Python特定二进制格式之间的转换
dumps()、dump()、loads()、
load()
shelve
专门用于将Python数据类型的数据持久化到磁盘,shelve是一个类似dict的对象,操
作十分便捷
open()
json模块模块
大部分编程语言都会提供处理json数据的接口,Python 2.6开始加入了json模块,且把它作为一个内置模块提供,无需下载即
可使用。
json支持的数据格式有限,有int str list dict以及特殊的tuple(会将tuple转为list)
Json模块提供了四个功能:dumps、dump、loads、load
dumps和loads主要是在内存内操作,如下:
import json
list = ['a','b','c']
list_str = json.dumps(list)
print(list_str) #["a", "b", "c"]
list2 = json.loads(list_str)
print(list2) #['a', 'b', 'c']
而dump和load是从文件内操作,如下:
import json
list = ['a','b','c']
with open('test','w',encoding='utf-8') as f:
json.dump(list,f)
with open('test','r',encoding='utf-8') as f2:
json.load(f2)
json模块中的字符编码问题模块中的字符编码问题
在Python3中,代码中的字符串都是使用 unicode 格式存放的,序列化之后也是以unicode 格式存放,所以序列化和反序列化
过程都不存在问题。
Python2中,代码中的字符串是 str类型,str类型 和 unicode类型 的关系如下所示:
unicode -----> encode --------> str(例如为 utf-8编码)
utf-8(例如为 utf-8编码) --------> decode ----------> unicode
所以在Python2中,序列化过程和反序列化过程都有涉及到转码过程(encode和decode),序列化过程 会先将对象中的字符
串 使用utf-8 进行解码(decode),转换为unicode类型后,再存放到文件或者字符串中,反序列化过程 会将 json字符串 使用
utf-8 编码(encode),然后存放到内存中的变量~
pickle模块模块
用法与json类似,不过pickle不能跨语言,优点是它支持python所有的数据类型
需要注意的是,pickle是以bytes类型来进行序列化的
资源评论
weixin_38732315
- 粉丝: 6
- 资源: 963
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功