从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节流转化为Python数据对象,不要从不收信任的数据源中拆封数据。可以封装和拆封几乎任何Python数据对象,主要包括:
None , True,False
整数,浮点数,复数
字符串,字节,ByteArray对象
元组,列表,集合,包含可封装对象的字典
在一个模块的顶层定义的函数
在一个模块的顶层定义的内置函数
那是在一个模块的顶层定义的类
__dict__或调用__getstate__()的结果是可封装的类的实例
pickle模块中常用的方法有:
1. pickle.dump(obj, file, protocol=None,)
必填参数obj表示将要封装的对象
必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb”
可选参数protocol表示告知pickler使用的协议,支持的协议有0,1,2,3,默认的协议是添加在Python 3中的协议3, 其他的协议详情见参考文档
2. pickle.load(file,*,fix_imports=True, encoding="ASCII", errors="strict")
必填参数file必须以二进制可读模式打开,即“rb”,其他都为可选参数
3. pickle.dumps(obj):以字节对象形式返回封装的对象,不需要写入文件中
4. pickle.loads(bytes_object): 从字节对象中读取被封装的对象,并返回
pickle模块可能出现三种异常:
1. PickleError:封装和拆封时出现的异常类,继承自Exception
2. PicklingError: 遇到不可封装的对象时出现的异常,继承自PickleError
3. UnPicklingError: 拆封对象过程中出现的异常,继承自PickleError
pickle应用实例:
import pickle
with open("my_profile.txt", "wb") as myprofile:
pickle.dump({"name":"AlwaysJane", "age":"20+", "sex":"female"}, myprofile)
with open("my_profile.txt", "rb") as get_myprofile:
print (pickle.load(get_myprofile))
import pickle
class Profile:
name = "AlwaysJane"
pickledclass = pickle.dumps(Profile)
print (pickledclass)
print (pickle.loads(pickledclass))
理解不是很透彻,希望大神们指正错误。。。
附上参考文档
相关推荐
-
Python中的数据对象持久化存储模块pickle的使用示例
Python中可以使用 pickle 模块将对象转化为文件保存在磁盘上,在需要的时候再读取并还原.具体用法如下: pickle是Python库中常用的序列化工具,可以将内存对象以文本或二进制格式导出为字符串,或者写入文档.后续可以从字符或文档中还原为内存对象.新版本的Python中用c重新实现了一遍,叫cPickle,性能更高. 下面的代码演示了pickle库的常用接口用法,非常简单: import cPickle as pickle # dumps and loads # 将内存对象dump为
-
Python pickle模块用法实例分析
本文实例讲述了Python pickle模块用法.分享给大家供大家参考.具体分析如下: pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. pickle.dump(obj, file[, protocol]) 序列化对象,并将结果数据流写入到文件对象中.参数protocol是序列化模式,默认值为0,表示以文本的形式序列化.protocol的值还可以是1或2,表示以二进制的形式序列化. pickle.load(file) 反序列化对象.将文件中的数据解析为一个Python
-
Python pickle类库介绍(对象序列化和反序列化)
一.pickle pickle模块用来实现python对象的序列化和反序列化.通常地pickle将python对象序列化为二进制流或文件. python对象与文件之间的序列化和反序列化: 复制代码 代码如下: pickle.dump() pickle.load() 如果要实现python对象和字符串间的序列化和反序列化,则使用: 复制代码 代码如下: pickle.dumps() pickle.loads() 可以被序列化的类型有: * None,True 和 False; * 整数,浮点数
-
Python 序列化 pickle/cPickle模块使用介绍
Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁.很多游戏允许你在退出的时候保存进度,然后你再次启动的时候回到上次退出的地方.(实际上,很多非游戏程序也会这么干)在这种情况下,一个捕获了当前进度的数据结构需要在你退出的时候保存到硬盘上,接着在你重新启动的时候从硬盘上加载进来. Python标准库提供pickle和cPickle模块.cPickle是用C编码的,在运行效率上比pickle要高,
-
python持久性管理pickle模块详细介绍
持久性就是指保持对象,甚至在多次执行同一程序之间也保持对象.通过本文,您会对 Python对象的各种持久性机制(从关系数据库到 Python 的 pickle以及其它机制)有一个总体认识.另外,还会让您更深一步地了解Python 的对象序列化能力. 什么是持久性? 持 久性的基本思想很简单.假定有一个 Python 程序,它可能是一个管理日常待办事项的程序,您希望在多次执行这个程序之间可以保存应用程序对象(待办事项).换句话说,您希望将对象存储在磁盘上,便于 以后检索.这就是持久性.要达到这个目
-
python使用cPickle模块序列化实例
本文实例讲述了python使用cPickle模块序列化的方法,分享给大家供大家参考. 具体方法如下: import cPickle data1 = ['abc',12,23] #几个测试数据 data2 = {1:'aaa',"b":'dad'} data3 = (1,2,4) output_file = open("a.txt",'w') cPickle.dump(data1,output_file) cPickle.dump(data2,output_file)
-
python中cPickle用法例子分享
在python中,一般可以使用pickle类来进行python对象的序列化,而cPickle提供了一个更快速简单的接口,如python文档所说的:"cPickle -- A faster pickle". cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象等.而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复.在cPickle中,主要有四个函数可以做这一工作,下面使用例子来介绍. 1, dump: 将pyt
-
python pickle 和 shelve模块的用法
1.pickle 写: 以写方式打开一个文件描述符,调用pickle.dump把对象写进去 复制代码 代码如下: dn = {'baidu':'www.baidu.com','qq':'www.qq.com','360':'www.360.cn'} name = ['mayun','mahuateng','liyanhong'] f = open(r'C:\a.txt','w') pickle.dump(dn,f) ##写一个对象 pickle.dump(name,f) ##再写一个
-
Python pickle模块用法实例
python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象. 基本接口: 复制代码 代码如下: pickle.dump(obj, file, [,protocol]) 注解:将对象obj保存到文件file中去. protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示:1:老式的二进制
-
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节流转化为Python数据对象,不要从不收信任的数据源中拆封数据.可以封装和拆封几乎任何Python数据对象,主要包括: None , True,False 整数,浮点数,复数 字符串,字节,ByteArray对象 元组,列表,集合,包含可封装对象的字典 在一个模块的顶层定义的函数 在一个模块的顶层定义的内置函数 那是在一个模块的顶层定义的类 __dict_
-
从零学python系列之新版本导入httplib模块报ImportError解决方案
之前用Python 2.7版本的httplib做接口测试时,运行代码都是正常的, 最近开始用Python 3.3之后,再去看以前的代码,发现import httplib出现错误:Unresolved import :httplib, 运行代码时也报错:ImportError: No module named 'httplib' 查找各种资料发现原来Python 2.x中的"httplib"模块在Python 3.x中变成了"http.client",就怪之前只了解了
-
从零学python系列之数据处理编程实例(二)
在上一节从零学python系列之数据处理编程实例(一)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年月 数据准备:分别建立四个文本文件 james2.txt James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22 julie2.txt Julie Jones,2002-8-17,2.59,2.11
-
Python入门_浅谈字符串的分片与索引、字符串的方法
这篇文章主要介绍了字符串的分片与索引.字符串的方法. 字符串的分片与索引: 字符串可以用过string[X]来分片与索引.分片,简言之,就是从字符串总拿出一部分,储存在另一个地方. 看下面这个例子,string[0]代表第一个字符,string[-1]为最后一个字符,空格也算一个字符:如果想截取某一段字符时,可以用string[X:X]来表示,其中冒号切记需为英文状态下的,如果从头或是从结尾开始截取,可以直接省略掉开头和结尾的表示. string = 'I am a Product Manage
-
从零学python系列之数据处理编程实例(一)
要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式都精确为分秒,时间越短成绩越好,分别输出每个学生的无重复的前三个最好成绩,且分秒的分隔符要统一为"." 数据准备:分别建立四个文本文件 james.txt 2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22 julie.txt 2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21
-
从零学python系列之从文件读取和保存数据
在HeadFirstPython网站中下载所有文件,解压后以chapter 3中的"sketch.txt"为例: 新建IDLE会话,首先导入os模块,并将工作目录却换到包含文件"sketch.txt"的文件夹,如C:\\Python33\\HeadFirstPython\\chapter3 复制代码 代码如下: >>> import os>>> os.getcwd() #查看当前工作目录'C:\\Python33'>&
-
从零学python系列之教你如何根据图片生成字符画
说下思路吧: 原图->灰度->根据像素亮度-映射到指定的字符序列中->输出.字符越多,字符变化稠密.效果会更好.如果根据灰度图的像素亮度范围制作字符画,效果会更好.如果再使用调色板,对字符进行改色,就更像原图了. 这是原图: 这是生成的字符画: 废话不多说,直接上代码: 复制代码 代码如下: import Imagechars =" ...',;:clodxkLO0DGEKNWMM"fn=r'c:\users\liabc\desktop\jianbing.png'f1
-
Python入门_浅谈数据结构的4种基本类型
数据结构:通俗点说,就是储存大量数据的容器.这里主要介绍Python的4种基本数据结构:列表.字典.元组.集合. 格式如下: 列表:list = [val1,val2,val3,val4],用中括号: 字典:dict = {key1:val1,key2:val2},大括号,且每个元素是带有冒号的key与val的对应关系组: 元组:tuple = (val1,val2,val3,val4),小括号: 集合:set = {val1,val2,val3,val4},大括号. 1. 列表: list =
-
python进阶_浅谈面向对象进阶
学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass class Foo: pass class Son(Foo): pass s = Son() #判断一个对象是不是这个类的对象,传两个参数(对象,类) print(isinstance(s,Son)) print(isinstance(s,Foo)) #type更精准 print(type(s) is Son) print(type(s) is Fo
-
Python入门_浅谈for循环、while循环
Python中有两种循环,分别为:for循环和while循环. 1. for循环 for循环可以用来遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次).for循环的基本结构如下: 具体看这个案例: 设计一个函数,在桌面创建10个文本,用数字从1-10依次给它们命名. def text_create(): path = '/Users/duwangdan/Desktop/' for text_name in range(1,11): # 1-10的范围需要用到r
随机推荐
- 一个小型js框架myJSFrame附API使用帮助
- Vue.js实现简单ToDoList 前期准备(一)
- Python程序员鲜为人知但你应该知道的17个问题
- aspx后台传递Json到前台的两种接收方法推荐
- js中各浏览器中鼠标按键值的差异
- asp.net Cookie值中文乱码问题解决方法
- 初步解析Python下的多进程编程
- JAVA velocity模板引擎使用实例
- PHP 验证码不显示只有一个小红叉的解决方法
- web标准常见问题集合3
- 论坛20大经典变态楼主主题和回复,暴强!
- express的中间件basicAuth详解
- jquery实现手风琴效果
- 关于javascript中this关键字(翻译+自我理解)
- [对联广告] JS脚本类
- 文本框只能输入数字的实现方法(兼容IE火狐)
- java 重定义数组的实现方法(与VB的ReDim相像)
- Java的RxJava库操作符的用法及实例讲解
- C# 为String类型增加方法详解
- C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别