python 实用pickle序列化
2024-09-30 19:48:50
存储数据结构到一个文件中称为序列化。相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对象,前面提到的安全问题也同样会发生,不要对你不信任的文件做反序列化。
最新文章
- php实验5数组
- BootSrap学习
- 华东交通大学2016年ACM“双基”程序设计竞赛 1008
- deerlet-redis-client添加集群支持,邀请各路大神和菜鸟加入。
- BZOJ3755 : Pty爬山
- vb.net写的odbc连接dsn数据源和ole链接oracle的小例子
- 【Android】关于pix,dip,dip,sp等相关概念
- C# 之 抽象类与接口
- asp.net——初识多线程
- php中的XML转数组
- 一些LVS实验配置、工具和方案
- UWP 使用OneDrive云存储2.x api(一)【全网首发】
- @PostConstruct注解小结
- spring深入学习(二)-----bean的生命周期、IOC容器bean装配
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习8
- 037 关于pom.xml的一些问题的理解
- Python3 tkinter基础 Canvas create_rectangle 画矩形
- python学习笔记目录
- spring boot mybatis sql打印到控制台
- 解决创建maven项目Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart问题