浅析Python中的序列化存储的方法
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict:
1
|
d = dict (name = 'Bob' , age = 20 , score = 88 )
|
可以随时修改变量,比如把name改成'Bill',但是一旦程序结束,变量所占用的内存就被操作系统全部回收。如果没有把修改后的'Bill'存储到磁盘上,下次重新运行程序,变量又被初始化为'Bob'。
我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
Python提供两个模块来实现序列化:cPickle和pickle。这两个模块功能是一样的,区别在于cPickle是C语言写的,速度快,pickle是纯Python写的,速度慢,跟cStringIO和StringIO一个道理。用的时候,先尝试导入cPickle,如果失败,再导入pickle:
1
2
3
4
|
try :
import cPickle as pickle
except ImportError:
import pickle
|
首先,我们尝试把一个对象序列化并写入文件:
1
2
3
|
>>> d = dict (name = 'Bob' , age = 20 , score = 88 )
>>> pickle.dumps(d)
"(dp0\nS'age'\np1\nI20\nsS'score'\np2\nI88\nsS'name'\np3\nS'Bob'\np4\ns."
|
pickle.dumps()方法把任意对象序列化成一个str,然后,就可以把这个str写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object:
1
2
3
|
>>> f = open ( 'dump.txt' , 'wb' )
>>> pickle.dump(d, f)
>>> f.close()
|
看看写入的dump.txt文件,一堆乱七八糟的内容,这些都是Python保存的对象内部信息。
当我们要把对象从磁盘读到内存时,可以先把内容读到一个str,然后用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象。我们打开另一个Python命令行来反序列化刚才保存的对象:
1
2
3
4
5
|
>>> f = open ( 'dump.txt' , 'rb' )
>>> d = pickle.load(f)
>>> f.close()
>>> d
{ 'age' : 20 , 'score' : 88 , 'name' : 'Bob' }
|
变量的内容又回来了!
当然,这个变量和原来的变量是完全不相干的对象,它们只是内容相同而已。
Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。
浅析Python中的序列化存储的方法相关推荐
- python中的序列类型数据结构元素的切片操作_浅析python中的分片与截断序列
浅析python中的分片与截断序列 序列概念 在分片规则里list.tuple.str(字符串)都可以称为序列,都可以按规则进行切片操作 切片操作 注意切片的下标0代表顺序的第一个元素,-1代表倒序的 ...
- python中的列表和元组_浅析Python中的列表和元组
区别列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数). 元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变. 元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问 ...
- python多线程好还是多协程好_深入浅析python中的多进程、多线程、协程
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...
- Python中的静态类变量和方法
问: 如何在 Python 中创建静态类变量或方法? 答1: huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效. 在类定义内但不在方法内声明的变量是 ...
- Python中optionParser模块的使用方法实例教程
Python中optionParser模块的使用方法实例教程 转载 2014-08-29 投稿:shichen2014 我要评论 这篇文章主要介绍了Python中optionParser模 ...
- Python中range函数的使用方法
Python中range函数的使用方法 更新时间:2022年05月30日 11:38:15 作者:Python编程学习圈 这篇文章主要介绍了Python中range函数的使用方法,文章基于Pyth ...
- Python精讲:在Python中遍历字典的三大方法详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中遍历字典的三大方法详解>.本知识点主要内容有:使用字典对象的items()方法可以遍历字典的项和字典的&qu ...
- 在Python中连接字符串的首选方法是什么?
本文翻译自:Which is the preferred way to concatenate a string in Python? Since Python's string can't be c ...
- 关于python中requests模块导入问题-python中requests模块的使用方法
本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合 ...
最新文章
- 【大话Hibernate】hibernate缓存详解
- 2017已过半,这半年,你累吗?
- python中__init__方法_关于python中__init__方法理解
- Monkey稳定性测试初探(二)
- JAVA偏向锁的什么时候释放_​java偏向锁,你还没上车,它就要被去掉了
- linux 下 Apache自启动 配置方法
- 基于python+boostrap的学校图书馆管理系统
- AXure RP8 破解码
- python题目58:工厂流水线调度
- 蓝鸽集团云计算机,App Store 上的“蓝鸽教育云”
- 动态数组是怎么创建的?BQe
- 网页连接至数据库(asp->mdb)
- 概括TTL、RS32、RS485特点及区别
- Python从零到就业
- seamle***dp+rdesktop完美结合
- 怎么用python读取excel图_Python如何读取excel中的图片
- 计算机网络 - 数据链路层
- 求一个给定的n阶方阵的鞍点
- [附源码]Node.js计算机毕业设计大众点评管理系统Express
- seata xid是什么_html中的xid