zoukankan      html  css  js  c++  java
  • python 实用pickle序列化

    存储数据结构到一个文件中称为序列化。相json这样的格式需要定制的序列化数据的转换器。python提供了pickle模块以特殊的二进制格式保存和恢复数据对象。

    还记得json解析datetime对象时出现问题?但对于pickle就不存在问题:

    >>> import pickle
    >>> import diatomite
    >>> now1 = datetime.datetime.utcnow()
    >>> pickled = pickle.dumps(now1)
    >>> now2 =pickle.loads(pickled)
    >>> now1
    datetime.datetime(2017,3,23,22,20,1970)
    >>> now2

    pickle 同样也适用于自己定义的类和对象。现在,我们定义一个简单的类 tiny,当其对象强制转换为字符串时会返回‘tiny’:

    >>> import pickle
    >>> class Tiny():
    ...         def __str__(self):
    ...         return 'tiny'
    ...
    >>> obj1 = Tiny()
    >>> obj1
    <__main__.Tiny object at 0x10076ed10>
    >>> str(obj1)
    'tiny'
    >>> pickled = pickle.dumps(obj1)
    >>> pickled
    b'x80x03c__main__
    Tiny
    qx00)x81qx01.'
    >>> obj2 = pickle.loads(pickled)
    >>> obj2
    <__main__.Tinyobject at 0x10076e550>
    >>> str(obj2)
    'tiny'

    pickled是从对象obj1转换来的序列化二进制字符串。然后再把字符串还远成对象obj1的副本obj2.使用函数dump()序列化数据到文件,而函数load()用作反序列化。

    备注:

    因为pickle会创建python对象,前面提到的安全问题也同样会发生,不要对你不信任的文件做反序列化。

    在尝试学习新的语言之前先理解这门语言的设计原理能够让你在探索这门新语言时保持一个清醒而且开发的状态。
  • 相关阅读:
    响应式开发: 宽高等比例缩放
    node服务成长之路
    node压力测试
    前端开发工具
    sequelize问题集锦
    webpack引入handlebars报错'You must pass a string or Handlebars AST to Handlebars.compile'
    夏夜无题
    jmeter在windows环境下系统参数设置
    服务端性能优化指南
    修车备忘
  • 原文地址:https://www.cnblogs.com/jackchen001/p/6607739.html
Copyright © 2011-2022 走看看