1. 程式人生 > >函式和常用模組【day06】:pickle模組(十一)

函式和常用模組【day06】:pickle模組(十一)

本節內容

1、dumps序列化和loads反序列化

2、dump序列化和load反序列化

3、序列函式

1、dumps序列化和loads反序列化

dumps()序列化

1 2 3 4 5 6 7 8 9 10 11 12 13 14 import  pickle   info  =  {      'name' : "zhangqigao" ,     
"age" : 22 , }   with  open ( "test.txt" , "wb" ) as f:    #以二進位制的形式寫入     
data  =  pickle.dumps(info)    #序列化成字串      f.write(data)    #寫入test.txt 檔案中   #輸出到test.txt檔案中的內容 �}q (X   ageqKX   nameqX     zhangqigaoqu.

loads()反序列化

1 2 3 4 5 6 7 8 9 import  pickle   with  open ( "test.txt" , "rb" ) as f:  #以二進位制的模式讀      data  =  pickle.loads(f.read())    #反序列化操作   print (data.get( "age" ))   #輸出 22

2、dump序列化和load反序列化

dump()序列化

1 2 3 4 5 6 7 8 9 10 11 12 13 import  pickle   info  =  {      'name' : "zhangqigao" ,      "age" : 22 , }   with  open ( "test.txt" , "wb" ) as f:      pickle.dump(info,f)   #序列化   #輸出 �}q (X   ageqKX   nameqX     zhangqigaoqu.

load()反序列化

1 2 3 4 5 6 7 8 9 import  pickle   with  open ( "test.txt" , "rb" ) as f:      data  =  pickle.load(f)   #反序列化成記憶體物件   print (data.get( "age" ))   #輸出 22

從上面的結果觀察,json和pickle好像也沒什麼區別?但是別忘了,我們說,json只能序列化簡單的資料型別,而pickle可以序列化python中所有的資料型別,包括函式、類等,下面我們就來看看,如何序列化函式的。還有就是,pickle序列化的是位元組,而json序列化的是字元,這個要注意一下。

3、序列化函式

①序列化

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import  pickle   def  sayhi(name):    #函式      print ( "hello:" ,name)   info  =  {      'name' : "zhangqigao" ,      "age" : 22 ,      "func" :sayhi     #"func"對應的值sayhi,是函式名 }   with  open ( "test.txt" , "wb" ) as f:      data  =  pickle.dumps(info)      f.write(data)   #輸出test.txt �}q (X   funcqc__main__ sayhi qX   ageqKX   nameqX     zhangqigaoqu.

②反序列化

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import  pickle   def  sayhi(name):    #在反序列化中必須寫上此函式,不然會報錯,因為在載入的時候,函式沒有載入到記憶體      print ( "hello:" ,name)   with  open ( "test.txt" , "rb" ) as f:      data  =  pickle.loads(f.read())   print (data.get( "age" ))   data.get( "func" )( "zhangqigao" )   #執行函式sayhi   #輸出 22 hello: zhangqigao    #輸出的函式體中的邏輯也是可以變的,這邊我就不做演示了

 小結:

  1. json值支援簡單的資料型別,pickle支援所有的資料型別。
  2. pickle只能支援python本身的序列化和反序列化,不能用作和其他語言做資料互動,而json可以。
  3. pickle序列化的是整個的資料物件,所以反序列化函式時,函式體中的邏輯變了,是跟著心的函式體走的。
  4. pickle和json在3.0中只能dump一次和load一次,在2.7裡面可以dump多次,load多次,anyway,以後只記住,只需要dump一次,load一次就可以了。