1. 程式人生 > >函式和常用模組【day06】:shelve模組(五)

函式和常用模組【day06】:shelve模組(五)

本節內容

1、簡述

2、shelve概念

3、shelve模組使用

4、總結

一、簡述

   之前我們說不管是json也好,還是pickle也好,在python3中只能dump一次和load一次,不能dump多次,和load多次,但是我們真想要dump多次和load多次怎麼辦呢,並且能事項資料的持久化吶?好吧,今天我們就來說說這個shelve模組。

二、shelve概念

1、持久化

1 2 3 4 5 6 7 8 9 10 11 12 13 import  shelve    #匯入shelve模組   def  stu_data(name,age):    #定義一個函式      print (
"register stu:" ,name,age)   name  =  [ "test" , "zhang" , "qi" , "gao" ]    #定義一個列表   info 
=  "name" : "zhangqigao" , "age" : 18 #定義一個字典   with shelve. open ( "shelve_test" ) as d:      d[ "test" =  name     #持久化列表      d[ "info" =  info        #持久化字典      d[ "func" =  stu_data    #持久化函式

程式碼執行結果:

生成三個資料夾,分別是:shelve_test.dir、shelve_test.dat、shelve_test.bak

①shelve_test.dir內容

1 2 3 'test' , ( 0 50 ) 'func' , ( 1024 24 ) 'info' , ( 512 48 )

②shelve_test.dat內容

1 2 3 4 5 6 �]q (X   testqX   zhangqX   qiqX   gaoqe. �}q (X   nameqX     zhangqigaoqX   ageqKu. �c__main__ stu_data q .

 ③shelve_test.bak內容

1 2 3 'test' , ( 0 50 ) 'func' , ( 1024 24 ) 'info' , ( 512 48 )

 2、解析檔案內容

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import  shelve   def  stu_data(name,age):    #這邊一定要定義相同名字的函式,不然執行報錯      print ( "stu:" ,name,age)   with shelve. open ( "shelve_test" ) as f:      print (f[ 'test' ])       #解析列表      print (f[ 'info' ])        #解析字典      print (f[ "func" ]( "zhangqsan" , 22 ))    #解析函式   #輸出 [ 'test' 'zhang' 'qi' 'gao' ] { 'age' 18 'name' 'zhangqigao' } stu: zhangqsan  22 None

三、shelve模組使用

3.1、常用方法

1 2 3 4 5 6 7 8 9 10 11 12 >>>  import  shelve >>> d  =  shelve. open ( "shelve_test" ) >>>  dir (d) [ '_MutableMapping__marker' '__abstractmethods__' '__class__' '__contains__' '__del__' ,   '__delattr__' '__delitem__' '__dict__' '__dir__' '__doc__' '__enter__' '__eq__' '__exit__' ,   '__format__' '__ge__' '__getattribute__' '__getitem__' '__gt__' '__hash__' '__init__' , '__iter__' '__le__' '__len__' '__lt__' '__module__' '__ne__' '__new__' '__reduce__' ,   '__reduce_ex__' '__repr__' '__setattr__' '__setitem__' '__sizeof__' '__slots__' '__str__' ,   '__subclasshook__' '__weakref__' '_abc_cache' '_abc_negative_cache' , '_abc_negative_cache_version' '_abc_registry' '_protocol' 'cache' 'clear' 'close' 'dict' ,   'get' 'items' 'keyencoding' 'keys' 'pop' 'popitem' 'setdefault' 'sync' 'update' , 'values' 'writeback' ]

 3.2、update

說明:update方法是如果序列化的值存在,則更新,如果不存在,則新增,用法:update({key:序列化物件})

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #dumps到檔案中 import  shelve   info  =  {      "name" : "zhangqigao" ,      "age" : 18 }   with shelve. open ( "shelve_test" ) as d:      d[ 'qigaotest' =  info    #變數存在      d.update({ 'qigaotest' : "shuaigaogao" })    #更新已經key為"qigaotest"的值     #loads到記憶體中 import  shelve   with shelve. open ( "shelve_test" ) as f:      print (f.get( "qigaotest" ))   #輸出 shuaigaogao

3.3、get

說明:把檔案中的值load到記憶體中時,通過get它的key值獲取

1 2 3 4 5 6 7 import  shelve   with shelve. open ( "shelve_test" ) as f:      print (f.get( "qigaotest" ))  #或者是f["qigaotest"]   #輸出 shuaigaogao

 注意:如果是通過f["qigaotest"]這種方法取,如果值不存在則會報錯,通過get去取,不存在,則會返回none

四、總結

  1. shelve模組是一個簡單的key,value將記憶體資料通過檔案持久化的模組。
  2. shelve模組可以持久化任何pickle可支援的python資料格式。
  3. shelve就是pickle模組的一個封裝。
  4. shelve模組是可以多次dump和load。