zoukankan      html  css  js  c++  java
  • 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  深圳

  • 相关阅读:
    os.fork()
    解决方案:WindowsError: [Error 2]
    Python遍历文件夹和读写文件的方法
    导航帖
    IDEA后缀补全及快捷键
    Codeforces-Round#614 Div2
    图论算法-欧拉回路 专题训练
    快速求出n!质因数的个数
    Codeforces-Round#589 Div2
    洛谷P3386二分图匹配
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7396934.html
Copyright © 2011-2022 走看看