【python】pickle模块

持久性的基本思想很简单。假定有一个 Python 程序,它可能是一个管理日常待办事项的程序,您希望在多次执行这个程序之间可以保存应用程序对象(待办事项)。换句话说,您希望将对象存储在磁盘上,便于以后检索。这就是持久性。要达到这个目的,有几种方法,每一种方法都有其优缺点。

例如,可以将对象数据存储在某种格式的文本文件中,譬如 CSV 文件。或者可以用关系数据库,譬如 Gadfly、MySQL、PostgreSQL 或者 DB2。这些文件格式和数据库都非常优秀,对于所有这些存储机制,Python 都有健壮的接口。

这些存储机制都有一个共同点:存储的数据是独立于对这些数据进行操作的对象和程序。这样做的好处是,数据可以作为共享的资源,供其它应用程序使用。缺点是,用这种方式,可以允许其它程序访问对象的数据,这违背了面向对象的封装性原则 — 即对象的数据只能通过这个对象自身的公共(public)接口来访问。

另外,对于某些应用程序,关系数据库方法可能不是很理想。尤其是,关系数据库不理解对象。相反,关系数据库会强行使用自己的类型系统和关系数据模型(表),每张表包含一组元组(行),每行包含具有固定数目的静态类型字段(列)。如果应用程序的对象模型不能够方便地转换到关系模型,那么在将对象映射到元组以及将元组映射回对象方面,会碰到一定难度。这种困难常被称为阻碍性不匹配(impedence-mismatch)问题。

序列化:dumps(object) 返回一个字符串,它包含一个 pickle 格式的对象。

    dump(object, file) 将对象写到文件,这个文件可以是实际的物理文件,但也可以是任何类似于文件的对象,这个对象具有 write() 方法,可以接受单个的字符串参数

反序列化: loads(string) 返回包含在 pickle 字符串中的对象

      load(file) 返回包含在 pickle 文件中的对象

清单1 :dumps() 和 loads() 的演示

  1. >>> import cPickle as pickle
  2. >>> t1 = (‘this is a string‘, 42, [1, 2, 3], None)
  • >>> t1
  • (‘this is a string‘, 42, [1, 2, 3], None)
  • >>> p1 = pickle.dumps(t1)
  • >>> p1
  • "(S‘this is a string‘/nI42/n(lp1/nI1/naI2/naI3/naNtp2/n."
  • >>> print p1
  • (S‘this is a string‘
  • I42
  • (lp1
  • I1
  • aI2
  • aI3
  • aNtp2
  • .
  • >>> t2 = pickle.loads(p1)
  • >>> t2
  • (‘this is a string‘, 42, [1, 2, 3], None)
  • >>> p2 = pickle.dumps(t1, True)
  • >>> p2
  • ‘(U/x10this is a stringK*]q/x01(K/x01K/x02K/x03eNtq/x02.‘
  • >>> t3 = pickle.loads(p2)
  • >>> t3
  • (‘this is a string‘, 42, [1, 2, 3], None)

接下来,我们看一些示例,这些示例用到了 dump() 和 load() ,它们使用文件和类似文件的对象。这些函数的操作非常类似于我们刚才所看到的 dumps() 和 loads() ,区别在于它们还有另一种能力 — dump() 函数能一个接着一个地将几个对象转储到同一个文件。随后调用 load() 来以同样的顺序检索这些对象。清单 2 显示了这种能力的实际应用:

>>> a1 = ‘apple‘
>>> b1 = {1: ‘One‘, 2: ‘Two‘, 3: ‘Three‘}
>>> c1 = [‘fee‘, ‘fie‘, ‘foe‘, ‘fum‘]
>>> f1 = file(‘temp.pkl‘, ‘wb‘)
>>> pickle.dump(a1, f1, True)
>>> pickle.dump(b1, f1, True)
>>> pickle.dump(c1, f1, True)
>>> f1.close()
>>> f2 = file(‘temp.pkl‘, ‘rb‘)
>>> a2 = pickle.load(f2)
>>> a2
‘apple‘
>>> b2 = pickle.load(f2)
>>> b2
{1: ‘One‘, 2: ‘Two‘, 3: ‘Three‘}
>>> c2 = pickle.load(f2)
>>> c2
[‘fee‘, ‘fie‘, ‘foe‘, ‘fum‘]
>>> f2.close()

  

时间: 2024-08-03 07:34:33

【python】pickle模块的相关文章

[转]python pickle模块

持久性就是指保持对象,甚至在多次执行同一程序之间也保持对象.通过本文,您会对 Python对象的各种持久性机制(从关系数据库到 Python 的 pickle以及其它机制)有一个总体认识.另外,还会让您更深一步地了解Python 的对象序列化能力. 什么是持久性? 持久性的基本思想很简单.假定有一个 Python 程序,它可能是一个管理日常待办事项的程序,您希望在多次执行这个程序之间可以保存应用程序对象(待办事项).换句话说,您希望将对象存储在磁盘上,便于以后检索.这就是持久性.要达到这个目的,

[笔记]python pickle模块

什么叫序列化 把变量存储到磁盘的过程叫序列化,英语中也叫:pickling, serialization, marshalling, fastening. 反之,把磁盘中的变量内容读到内存中就是反序列化,又叫unpickle,名词是unpickling. 在Python中,有两个模块cPickle和pickle可以用来序列化.只不过,cPickle是用C语言写的,比较快.而pickle,是用python语言写的. 在导入过程中,常常先尝试导入cPickle模块,如果不行,才导入pickle模块.

python——pickle模块的详解

pickle模块详解 该pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. “Pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构.pickle模块对于错误或恶意构造的数据是不安全的. pickle协议和JSON(JavaScript Object Notation)的区别 : 1. JSON是一种文本序列化格式(它输出unicode文本,虽然大部分时间它

python pickle 模块的使用

pickle模块是能够让我们直接在文件中存储几乎任何Python对象的高级工具,并不要求我们把字符串转换来转换去,像是个超级通用的数据格式化和解析工具.想要在文件中储存字典,就直接用pickle来储存. >>>D = {'a': 1, 'b':2} >>>F = open('datafile.pkl', 'wb') >>>import pickle >>>pickle.dump(obj=D, file=F, protocol=None

Python pickle模块

pickle模块中主要有dumps()函数.loads()函数.dump() 函数.load() 函数. #pickle.dumps('object') #序列化对象,返回值不可直接读#pickle.dump('object', f) #序列化对象到文件中#pickle.loads('object') #反序列化对象#pickle.load( f) #从文件中反序列对象,返回原先的object import pickle obj = 123,"abcdedf",["ac&qu

python pickle 模块

为了更好的阅读,请查看我的笔记 文档:pickle模块.note链接:http://note.youdao.com/noteshare?id=cfe69f23f518f22d72e4190bc9245e65&sub=92E32B662AC44847BD7F04B850D53866 1.pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None) 将对象 obj 封存以后的对象写入已打开的 file

python模块 - pickle模块

http://blog.csdn.net/pipisorry python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象. 基本接口: pickle.dump(obj, file, [,protocol]) 注解:将对象obj保存到文件file中去. protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可

Python cPickle模块

新博客地址:http://gorthon.sinaapp.com/ 持久性就是指保持对象,甚至在多次执行同一程序之间也保持对象.通过本文,您会对 Python对象的各种持久性机制(从关系数据库到 Python 的 pickle以及其它机制)有一个总体认识.另外,还会让您更深一步地了解Python 的对象序列化能力. 什么是持久性? 持久性的基本思想很简单.假定有一个 Python 程序,它可能是一个管理日常待办事项的程序,您希望在多次执行这个程序之间可以保存应用程序对象(待办事项).换句话说,您

python开发模块基础:序列化模块json,pickle,shelve

一,为什么要序列化 # 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化'''比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来.但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中.你一定会问,将字典转换成一个字符串很简单,就是str(dic)就可以办到了,为什么我们还要学习序列化模块呢?没错序列化的过程就是从dic 变成str(dic)的

[转]python数据持久存储:pickle模块的基本使用

python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象. 基本接口: pickle.dump(obj, file, [,protocol]) 注解:将对象obj保存到文件file中去. protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示:1:老式的二进制协议:2:2.3版本引