Pickle模块数据对象持久化操作
Pickle模块的作用是持久化(序列化)的储存数据。
因此我先解释下:什么是序列化与反序列化、什么是对象序列化和对象反序列化。
通俗地讲,它们的定义如下:
序列化: 把一个对象保存到一个文件或数据库字段中去;
反序列化: 在适当的时候把这个文件再转化成原来的对象使用;
对象的序列化: 把对象转换为字节序列的过程;
对象的反序列化: 把字节序列恢复为对象的过程;
使用场合:
使用序列化主要是因为跨平台和对象存储的需求,因为网络上只允许字符串或者二进制格式,而文件需要使用二进制流格式。
如果想把一个内存中的对象存储下来就必须使用序列化转换为xml(字符串)、json(字符串)或二进制(流)等
注意: file.write/read操作的字符串对象,而pickle.dump/load操作的是结构化数据对象(如:列表、字典)。
常用接口:
(1) pickle.dump(obj, file, [,protocol]) #将obj对象序列化存入已经打开的file中。
obj: 结构化对象
file: 类文件对象(对象保存)
protocol: 序列化使用的协议版本。protocol默认值为0。
0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;
1:老式的二进制协议;
2:2.3版本引入的新二进制协议,较以前的更高效
(2) pickle.load(file) # 将file中的对象序列化读出。
(3) pickle.dumps(obj[, protocol]) #以字节对象形式返回封装的对象,不需要写入文件中。
(4) pickle.loads(file) #从字节对象中读取被封装的对象,并返回。
dump能将多个对象序列化存储到同一个文件中,随后调用load()来以同样的顺序反序列化读出这些对象。
#pickle用法举例: version: python 3.3.4
1.dump和load
>>> import pickle #导入pickle
>>> my_list = ['ABC','','中文',['']] #添加一个测试列表
>>> pickle_file = open('my_list.pkl','wb') #文件(my_list.pkl)必须以二进制可写模式打开,即"wb"
>>> pickle.dump(my_list,pickle_file) #调用pickle.dump方法,将my_list以二进制的方式写入pickle_file对象
>>> pickle_file.close() #关闭文件对象
>>> import os; os.getcwd() #引入os包,查看当前python目录
'D:\\Python33'
>>> os.listdir('D:\\Python33') #查看指定目录下的文件,可以看到已经生成一个名为my_list.pkl的二进制文件
[... 'my_list.pkl', .....] >>> pickle_file2 = open('my_list.pkl','rb') #文件(my_list.pkl)必须以二进制可读模式打开,即"rb"
>>> my_list2 = pickle.load(pickle_file2) #调用ickle.load方法,将以二进制格式保存的对象还原回来
>>> print (my_list2)
['ABC', '', '中文', ['']] #可以看出对象已经还原 #改进写法:
>>> import pickle
>>> my_list = ['ABC','','中文',['']]
>>> with open('my_list.pkl','wb') as file1: #采用with open as方式,不需要再调用close()
pickle.dump(my_list,file1)
>>> import os
>>> os.listdir(os.getcwd())
[... 'my_list.pkl', .....]
>>> with open('my_list.pkl','rb') as file2:
new_list = pickle.load(file2)
>>> print (new_list)
['ABC', '', '中文', ['']] 2.dumps和loads
#测试元组
>>> import pickle #导入pickle
>>> tuple1 = ('A',1,'小泉') #添加一个元祖
>>> tuple1
('A', 1, '小泉')
>>> str1 = pickle.dumps(tuple1) #以字节对象形式返回封装的对象,不需要写入文件中
>>> str2 = pickle.loads(str1) #从字节对象中读取被封装的对象
>>> print (str2)
('A', 1, '小泉')
>>> type(str2)
<class 'tuple'> #测试字符串
>>> str = 'Hello World!'
>>> import pickle
>>> str1 = pickle.dumps(str)
>>> str2 = pickle.loads(str1)
>>> print (str2)
Hello World!
>>> type(str)
<class 'str'>
>>> type(str2)
<class 'str'>
Pickle与CPickle对比
前者是完全用Python来实现的模块,这个CPickle是用C来实现的,它的速度要比pickle快好多倍。
一般建议如果电脑中只要有CPickle的话都应该使用它。
参考资料:
pickle模块的使用讲解: http://blog.csdn.net/coffee_cream/article/details/51754484
Pickle模块数据对象持久化操作的更多相关文章
- python全栈开发-json和pickle模块(数据的序列化)
一.什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flat ...
- 使用pickle模块存储对象
import time import hashlib import pickle import os class Info(): def __init__(self): self.create_tim ...
- 设计模式---单例模式,pickle模块
设计模式---单例模式 简介 单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实 例存在.当你希望在整个系统中,某个类只能出现一个实例时 ...
- python学习_应用pickle模块封装和拆封数据对象
学习文件数据处理的时候了解到有pickle模块,查找官方文档学习了一些需要用到的pickle内容. 封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节 ...
- python pickle模块的使用/将python数据对象序列化保存到文件中
# Python 使用pickle/cPickle模块进行数据的序列化 """Python序列化的概念很简单.内存里面有一个数据结构, 你希望将它保存下来,重用,或者发送 ...
- python数据持久存储:pickle模块的基本使用
经常遇到在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据. 这个时候Pickle模块就派上用场了,它可以将对象转换 ...
- python数据的存储和持久化操作
Python的数据持久化操作主要是六类:普通文件.DBM文件.Pickled对象存储.shelve对象存储.对象数据库存储.关系数据库存储. 普通文件不解释了,DBM就是把字符串的键值对存储在文件里: ...
- python数据持久存储:pickle模块的使用
python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...
- pickle 数据对象的序列化和反序列化
python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...
随机推荐
- 重启网卡报错:Device eth0 does not seem to be present
ifconfig...没有看到eth0..然后重启网卡又报下面错误. 故障现象: service network restartShutting down loopback insterface: ...
- 复习HTML+CSS(4)
n HTML颜色表示 网页中的颜色有三种表示方法 颜色单词:blue.green.red.yellow 10进制表示:rgb(255,0,0).rgb(0,255,0).rgb(0,0,255) 1 ...
- mysql基础练习题
一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 /* Navicat MySQL Data Transfer Source Server : mysql5.7.1 Sour ...
- EOJ3536 求蛇形矩阵每一行的和---找规律
题目链接: https://acm.ecnu.edu.cn/problem/3536/ 题目大意: 求蛇形矩阵的每一行的和,数据范围n<=200000. 思路: 由于n数据较大,所以感觉应该是需 ...
- 02、NetCore2.0优化之Nuget包
02.NetCore2.0优化之Nuget包 在NetCore2.0中的包是如何管理的?如何存储的?微软做了哪些优化工作? -------------------------------------- ...
- windows使用Win32DiskImager安装树莓派系统
首先去 官网 下载一个树莓派镜像. 然后使用Win32DiskImager这个工具安装. 不过试了以下好像不管用. 然后网上有ubuntu安装树莓派操作系统的方法. 于是就想我要是装树莓派不会还得装一 ...
- 一文了解安卓APP逆向分析与保护机制
"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...
- Java知IO
---恢复内容开始--- Java将IO(文件.网络.终端)封装成非常多的类,看似繁杂,其实每个类的具有独特的功能. 按照存取的对象是二进制还是文本,java使用字节流和字符流实现IO. 流是java ...
- 存储过程学习笔记(SQL数据库
一. 存储过程简介 Sql Server的存储过程是一个被命名的存储在服务器上的Transacation-Sql语句集合,是封装重复性工作的一种方法,它支持用户声明的变量.条件执行和其他强大的编程 ...
- CSS 权威指南 CSS实战手册 第四版(阅读笔记)
前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分析本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...