【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() 
相關文章
相關標籤/搜索