存储数据结构到一个文件中称为序列化。相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'\x80\x03c__main__\nTiny\nq\x00)\x81q\x01.'
>>> obj2 = pickle.loads(pickled)
>>> obj2
<__main__.Tinyobject at 0x10076e550>
>>> str(obj2)
'tiny'

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

备注:

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

最新文章

  1. php实验5数组
  2. BootSrap学习
  3. 华东交通大学2016年ACM“双基”程序设计竞赛 1008
  4. deerlet-redis-client添加集群支持,邀请各路大神和菜鸟加入。
  5. BZOJ3755 : Pty爬山
  6. vb.net写的odbc连接dsn数据源和ole链接oracle的小例子
  7. 【Android】关于pix,dip,dip,sp等相关概念
  8. C# 之 抽象类与接口
  9. asp.net——初识多线程
  10. php中的XML转数组
  11. 一些LVS实验配置、工具和方案
  12. UWP 使用OneDrive云存储2.x api(一)【全网首发】
  13. @PostConstruct注解小结
  14. spring深入学习(二)-----bean的生命周期、IOC容器bean装配
  15. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习8
  16. 037 关于pom.xml的一些问题的理解
  17. Python3 tkinter基础 Canvas create_rectangle 画矩形
  18. python学习笔记目录
  19. spring boot mybatis sql打印到控制台
  20. 解决创建maven项目Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart问题

热门文章

  1. CDOJ 1171 两句话题意
  2. Spring MVC中@RequestParam/@RequestBody/@RequestHeader的用法收集(转)
  3. iPhone 证书导出分享给多个开发人员操作
  4. 邁向IT專家成功之路的三十則鐵律 鐵律八:IT人學習之道-基礎功
  5. Go -- 接口赋值
  6. java性能监控工具jmc-windows
  7. Content Provider 详解
  8. python(18)- 协程函数及应用
  9. 内核顶层Makefile相关4
  10. YAML 对中文的处理