【python】序列化和反序列化

 

序列化能够理解为:把python的对象编码转换为json格式的字符串,反序列化能够理解为:把json格式字符串解码为python数据对象。在python的标准库中,专门提供了json库与pickle库来处理这部分。python

json的dumps方法和loads方法,可实现数据的序列化和反序列化json

 

序列化:dumps(object) 返回一个字符串,它包含一个 pickle 格式的对象。【dict-->json】app

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

 

反序列化: loads(string) 返回包含在 pickle 字符串中的对象【json-->dict】this

      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 显示了这种能力的实际应用:spa

>>> 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() 
相关文章
相关标签/搜索