python pickle模块使用-将内存数据保存到文本中以及从文本中直接读取信息到内存中

来源:互联网 发布:智睿高清网络电视官网 编辑:程序博客网 时间:2024/05/01 22:35

本文主要探索以各种方式来保存 Python 对象,而不必将其转换成某种其它格式。

pickle 模块及其同类模块 cPickle 向 Python 提供了 pickle 支持。后者是用 C 编码的,它具有更好的性能,对于大多数应用程序,推荐使用该模块。我们将继续讨论 pickle ,但本文的示例实际是利用了 cPickle 。由于其中大多数示例要用 Python shell 来显示,所以先展示一下如何导入 cPickle ,并可以作为 pickle 来引用它:

>>> import cPickle as pickle

现在已经导入了该模块,接下来让我们看一下 pickle 接口。 pickle 模块提供了以下函数对: dumps(object) 返回一个字符串,它包含一个 pickle 格式的对象; loads(string) 返回包含在 pickle 字符串中的对象; dump(object, file) 将对象写到文件,这个文件可以是实际的物理文件,但也可以是任何类似于文件的对象,这个对象具有 write() 方法,可以接受单个的字符串参数; load(file) 返回包含在 pickle 文件中的对象。

示例1:使用dumps()和loads()  (不能直接保存到文本中,并且每次只能操作一个对象)注:对象可为字典,数组,列表等

  1. >>> import cPickle as pickle  
  2. >>> t1 = ('this is a string'42, [123], None)  
  • >>> t1  
  • ('this is a string'42, [123], 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, [123], 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, [123], None)  

示例2: 使用dump() 和load() (能够直接保存到文本中,将多个对象写入同一文本中并从同一文本中按照写入的顺序依次读取每一个对象)

  1. >>> a1 = 'apple'  
  2. >>> b1 = {1'One'2'Two'3'Three'}  
  3. >>> c1 = ['fee''fie''foe''fum']  
  4. >>> f1 = file('temp.pkl''wb')  
  5. >>> pickle.dump(a1, f1, True)  
  6. >>> pickle.dump(b1, f1, True)  
  7. >>> pickle.dump(c1, f1, True)  
  8. >>> f1.close()  
  9. >>> f2 = file('temp.pkl''rb')  
  10. >>> a2 = pickle.load(f2)  
  11. >>> a2  
  12. 'apple'  
  13. >>> b2 = pickle.load(f2)  
  14. >>> b2  
  15. {1'One'2'Two'3'Three'}  
  16. >>> c2 = pickle.load(f2)  
  17. >>> c2  
  18. ['fee''fie''foe''fum']  
  19. >>> f2.close()


阅读全文
0 0
原创粉丝点击