9. 数据保存库

本库主要提供了把Python数据保存到磁盘文件的功能。picklemarshal模块可以把多种Python数据类型的数据生成一个字节流,然后从字节流创建一个对象。不同类型的DB管理模块支持HASH的映射字符串保存。

9.1 pickle--Python对象序列化操作

本模块主要提供了二进制协议来对Python对象结构进行序列化和反序列化的操作,其实就是把一个内存里的对象保存到磁盘文件,以便以后可以再从磁盘文件上恢复过来。

9.1.1 与其它Python模块的关系

与模块marshal相比:

Python内部有一个模块marshal也实现了基本对象的序列化操作,并且它被使用来保存Python生成的代码为.pyc文件,但是模块pickle更通用一些,适用的场合更广泛一些,因此优先使用pickle。两者主要差别如下:

l 模块pickle拥有对一个对象已经被序列化过的跟踪,避免这个对象再次被序列化,相反模块marshal不具备这样的功能。因为在序列化递归和共享对象时,就需要能识别出来那些已经被序列化了,而那些还没有,所以marshal不能用于递归的对象序列化,如果使用marshal去序列化递归的对象就会导致Python解析器崩溃。还有一种情况,就是一个对象被多个地方引用,在模块pickle只会序列化一次,而模块marshal会序列化多次,这样就很难保证引用计数的正确性。

l 模块marshal不能用来序列化用户自己定义的类和它的实例,而模块pickle是可以。

l 模块marshal序列化的格式不能使用于不同的Python版本,因为它基本的作用就是用来保存.pyc文件,它不保持向前兼容旧版本的Python的功能。而模块pickle是保持不同Python版本之间进行兼容。

 

json格式比较:

l JSON是一个文本格式的序列化协议,而pickle是二进制格式的序列化协议。

l JSON是一个人类可读取内容的协议,而pickle不行。

l JSON是广泛使用在Python语言之外,而pickle只使用在Python语言之内。

l JSON缺省情况只能表示一个Python内置的数据类型,而不能表示用户自定义的类型,而pickle是可以。

 

9.1.2 数据流格式

模块pickle生成的数据流格式只能使用在Python领域,不像其它JSONXDR的标准,所以其它语言想访问这种格式就会比较麻烦。默认的情况下,pickle是采用比较节省的二进制格式表示。如果还想减少数据流的大小,可以使用压缩模块对它进地压缩。如果分析pickle产生的数据流格式,可以使用模块pickletools的功能来实现。pickle总共开发了5个版本,在Python3.4版本使用的是第4个版本协议格式。


蔡军生  QQ:9073204  深圳

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值