Python序列化详解(字典、元组、dataframe等的存储或传输)

什么是序列化

    序列化 (Serialization)又叫持久化。是将对象的状态信息转换为可以存储或传输的形式的过程。
    简单来说就是将内存中的对象如列表、字典等数据类型转换为可保存(二进制文件),可传输(如前后端交互的json)格式的过程。宏观上可以理解为把内存中的数据保存到硬盘中的过程,而这些数据不再是单一的文本,是结构化数据或者我们的对象信息

    而相应的反序列化就很好去理解了,就是相反的过程。就是将变量内容从序列化的对象重新读到内存里。反序列化是文件流转换为对象。

Python中序列化常用到的方法

1、json

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。而本次所说的json则是python的一个模块,可以实现数据的序列化。

json的dump、dumps方法

dump是将对象(可以是字典、列表、等等复杂的数据对象)存储至文件,易于保存。
在这里插入图片描述
dumps 则是将对象转换为字节流,易于传输。可进行前后端交互。
在这里插入图片描述
需要注意的是json.dumps方法会有一个返回值。

json的load和loads方法

load方法是把对象从文件流中读出
在这里插入图片描述
这里面有一个小问题,我们上面存储进去的是元组,读出来的却是列表,我们下面会换成其他数据类型继续测试。
loads 方法则是从字符串中读取我们需要的数据类型:
在这里插入图片描述
很显然这种读取方式仍然改变了数据类型,我们换为字典类型再进行一次测试。
在这里插入图片描述
值得开心的事,对于字典类型json的转换还是相对稳定的。但是细心的话可以发现,loads方法把我们的键由整形转换为了字符型。
我们再来测试一下对象的转换。
我们可以看到json模块虽然能做到把多种类型的python对象进行序列化和反序列化,能够快捷的进行对象的存储或者传输。但是很显然,也存在一些瑕疵,所以大家在具体使用的时候应根据自己的需求去调整。下面我们将介绍另一个强大的python序列化模块——pickle。

pickle

pickple 是python中非常强大的序列化模块,他可以序列化几乎所有类型的python对象。像json一样他同样用有dump和load方法。python在最开始的python2版本提供的有cPickle模块,是由c语言编写的处理效率更快,不过貌似在python3中不支持。同学们可以自己测一下,如果python3中可以用的话麻烦回复或者私聊我。

pickple.dump dumps

同样也是对文件流或字符串进行序列化,参数也是类似的。pickle.dump(obj, file, [,protocol]),[,protocol]为序列化协议。默认为0,如果取负数或者HIGHEST_PROTOCOL则使用最高的协议版本。

在这里插入图片描述
如果采用dumps方法,则很相似
在这里插入图片描述
和json模块不同的是,对象没有被读成字符类型而是二进制类型。

pickple.load loads

loads同样是反序列
在这里插入图片描述
值得高兴的是,我们无论是从文件流读还是字节流读出的对象类型都是没有改变的,所以我们在日常做序列化时又多了一个选择。

其他序列化方法

再之后就是特殊的库自带的序列化方法了,一个强大模块一般都具有强大的api。dataframe作为目前非常流行的python数据类型同样也提供了非常多的api,当然也包括序列化的操作。
dataframe则依靠两个方法,分别是
to_pickle:序列化
read_pickle:反序列化
在这里插入图片描述
是不是非常的强大,不得不说pandas是一个非常优秀的数据处理模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值