python開發_shelve_完整版_博主推薦


'''
    python中的shelve模塊,可以提供一些簡單的數據操作
    他和python中的dbm很相似。

    區別如下:
    都是以鍵值對的形式保存數據,不過在shelve模塊中,
    key必須為字符串,而值可以是python所支持的數據
    類型。在dbm模塊中,鍵值對都必須為字符串類型。

    sh['a'] = 'a'
    sh['c'] = [11, 234, 'a']
    sh['t'] = ('1', '2', '3')
    sh['d'] = {'a':'2', 'name':'Hongte' }
    sh['b'] = 'b'
    sh['i'] = 23

    我們可以獲取一個shelve對象
    sh = shelve.open('c:\\test\\hongten.dat', 'c')

    刪除shelve對象中的某個鍵值對
    del sh['d']

    遍歷所有數據
    for item in sh.items():
        print('鍵[{}] = 值[{}]'.format(item[0], sh[item[0]]))

    獲取某個鍵值對
    print(sh['a'])

    關閉shelve對象:
    sh.close()
    
    ####################################################
    ####        API中強調
    Do not rely on the shelf being closed automatically;
    always call close() explicitly when you don’t need
    it any more, or use a with statement with
    contextlib.closing().
    ####################################################

'''

下面是我做的demo,在demo中我做了比較詳細的注釋和說明,詳情如下:

運行效果

SHOW_LOG = False

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
SHOW_LOG : False
刪除所有數據...
保存數據...
##################################################
遍歷所有數據...
數據[gender] = [M]
數據[phone] = [('13423****62', '18998****62')]
數據[age] = [22]
數據[name] = [Hongten]
數據[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
##################################################
更新數據...
##################################################
遍歷所有數據...
數據[gender] = [M]
數據[phone] = [('13423****62', '18998****62', '020-90909090')]
數據[name] = [Hongten]
數據[hoby] = [('籃球', '羽毛球', '乒乓球', '游泳')]
數據[age] = [23]
數據[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
##################################################
獲取某個數據...
獲取[address]的值:{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}
##################################################
刪除某個數據...
##################################################
遍歷所有數據...
數據[gender] = [M]
數據[phone] = [('13423****62', '18998****62', '020-90909090')]
數據[age] = [23]
數據[name] = [Hongten]
數據[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
##################################################
刪除所有數據...
##################################################
遍歷所有數據...
>>> 

SHOW_LOG = True

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
SHOW_LOG : True
刪除所有數據...
保存數據...
保存數據[age] = [22]
保存數據[gender] = [M]
保存數據[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
保存數據[phone] = [('13423****62', '18998****62')]
保存數據[name] = [Hongten]
##################################################
遍歷所有數據...
數據[age] = [22]
數據[name] = [Hongten]
數據[gender] = [M]
數據[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
數據[phone] = [('13423****62', '18998****62')]
##################################################
更新數據...
更新數據[name] = [Hongten]
更新數據[hoby] = [('籃球', '羽毛球', '乒乓球', '游泳')]
更新數據[phone] = [('13423****62', '18998****62', '020-90909090')]
更新數據[age] = [23]
##################################################
遍歷所有數據...
數據[age] = [23]
數據[gender] = [M]
數據[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
數據[hoby] = [('籃球', '羽毛球', '乒乓球', '游泳')]
數據[phone] = [('13423****62', '18998****62', '020-90909090')]
數據[name] = [Hongten]
##################################################
獲取某個數據...
獲取[address]的值:{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}
##################################################
刪除某個數據...
刪除[hoby]的數據
##################################################
遍歷所有數據...
數據[age] = [23]
數據[name] = [Hongten]
數據[gender] = [M]
數據[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
數據[phone] = [('13423****62', '18998****62', '020-90909090')]
##################################################
刪除所有數據...
刪除數據[age] = [23]
刪除數據[gender] = [M]
刪除數據[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
刪除數據[phone] = [('13423****62', '18998****62', '020-90909090')]
刪除數據[name] = [Hongten]
##################################################
遍歷所有數據...
>>> 

=====================================================

代碼部分:

=====================================================

  1 #python shelve
  2 
  3 #Author : Hongten
  4 #MailTo : hongtenzone@foxmail.com
  5 #QQ     : 648719819
  6 #Blog   : http://www.cnblogs.com/hongten
  7 #Create : 2013-08-09
  8 #Version: 1.0
  9 
 10 import shelve
 11 '''
 12     python中的shelve模塊,可以提供一些簡單的數據操作
 13     他和python中的dbm很相似。
 14 
 15     區別如下:
 16     都是以鍵值對的形式保存數據,不過在shelve模塊中,
 17     key必須為字符串,而值可以是python所支持的數據
 18     類型。在dbm模塊中,鍵值對都必須為字符串類型。
 19 
 20     sh['a'] = 'a'
 21     sh['c'] = [11, 234, 'a']
 22     sh['t'] = ('1', '2', '3')
 23     sh['d'] = {'a':'2', 'name':'Hongte' }
 24     sh['b'] = 'b'
 25     sh['i'] = 23
 26 
 27     我們可以獲取一個shelve對象
 28     sh = shelve.open('c:\\test\\hongten.dat', 'c')
 29 
 30     刪除shelve對象中的某個鍵值對
 31     del sh['d']
 32 
 33     遍歷所有數據
 34     for item in sh.items():
 35         print('鍵[{}] = 值[{}]'.format(item[0], sh[item[0]]))
 36 
 37     獲取某個鍵值對
 38     print(sh['a'])
 39 
 40     關閉shelve對象:
 41     sh.close()
 42     
 43     ####################################################
 44     ####        API中強調
 45     Do not rely on the shelf being closed automatically;
 46     always call close() explicitly when you don’t need
 47     it any more, or use a with statement with
 48     contextlib.closing().
 49     ####################################################
 50 
 51 '''
 52 #global var
 53 #是否顯示日志信息
 54 SHOW_LOG = True
 55 
 56 def get_shelve():
 57     '''open -- file may get suffix added by low-level library'''
 58     return shelve.open('c:\\test\\hongten.dat', 'c')
 59 
 60 def save(sh):
 61     '''保存數據'''
 62     if sh is not None:
 63         sh['name'] = 'Hongten'
 64         sh['gender'] = 'M'
 65         sh['address'] = {'hometown' : 'Shuifu,Yunnan', 'nowadd' : 'Guangzhou,Guangdong'}
 66         sh['phone'] = ('13423****62', '18998****62')
 67         sh['age'] = 22
 68         if SHOW_LOG:
 69             for item in sh.items():
 70                 print('保存數據[{}] = [{}]'.format(item[0], sh[item[0]]))
 71         sh.close()
 72     else:
 73         print('the shelve object is None!')
 74 
 75 def update(sh):
 76     '''更新數據'''
 77     if sh is not None:
 78         sh['name'] = 'Hongten'
 79         sh['hoby'] = ('籃球', '羽毛球', '乒乓球', '游泳')
 80         sh['phone'] = ('13423****62', '18998****62', '020-90909090')
 81         sh['age'] = 23
 82         if SHOW_LOG:
 83             keys = ('name', 'hoby', 'phone', 'age')
 84             for item in keys:
 85                 print('更新數據[{}] = [{}]'.format(item, sh[item]))
 86         sh.close()
 87     else:
 88         print('the shelve object is None!')
 89 
 90 def delete(sh, key):
 91     '''刪除某個數據'''
 92     if sh is not None:
 93         if SHOW_LOG:
 94             print('刪除[{}]的數據'.format(key))
 95         del sh[key]
 96         sh.close()
 97     else:
 98         print('the shelve object is None!')
 99 
100 def deleteall(sh):
101     '''刪除所有數據'''
102     if sh is not None:
103         for item in sh.items():
104             if SHOW_LOG:
105                 print('刪除數據[{}] = [{}]'.format(item[0], sh[item[0]]))
106             del sh[item[0]]
107         sh.close()
108     else:
109         print('the shelve object is None!')
110 
111 def fetchone(sh, key):
112     '''獲取某個數據'''
113     if sh is not None:
114         print('獲取[{}]的值:{}'.format(key, sh[key]))
115         sh.close()
116     else:
117         print('the shelve object is None!')
118 
119 def fetchall(sh):
120     '''遍歷所有數據'''
121     if sh is not None:
122         for item in sh.items():
123             print('數據[{}] = [{}]'.format(item[0], sh[item[0]]))
124         sh.close()
125     else:
126         print('the shelve object is None!')
127 
128 ###############################################################
129 ###                測試           START
130 ###############################################################
131 def save_test():
132     '''保存數據...'''
133     print('保存數據...')
134     sh = get_shelve()
135     save(sh)
136 
137 def fetchall_test():
138     '''遍歷所有數據'''
139     print('遍歷所有數據...')
140     sh = get_shelve()
141     fetchall(sh)
142 
143 def fetchone_test():
144     '''獲取某個數據'''
145     print('獲取某個數據...')
146     sh = get_shelve()
147     key = 'address'
148     fetchone(sh, key)
149 
150 def delete_test():
151     '''刪除某個數據'''
152     print('刪除某個數據...')
153     sh = get_shelve()
154     key = 'hoby'
155     delete(sh, key)
156 
157 def update_test():
158     '''更新數據...'''
159     print('更新數據...')
160     sh = get_shelve()
161     update(sh)
162 
163 def deleteall_test():
164     '''刪除所有數據'''
165     print('刪除所有數據...')
166     sh = get_shelve()
167     deleteall(sh)
168     
169 ###############################################################
170 ###                測試           END
171 ###############################################################
172 
173 def init():
174     global SHOW_LOG
175     SHOW_LOG = True
176     print('SHOW_LOG : {}'.format(SHOW_LOG))
177     deleteall_test()
178     save_test()
179 
180 def main():
181     init()
182     print('#' * 50)
183     fetchall_test()
184     print('#' * 50)
185     update_test()
186     print('#' * 50)
187     fetchall_test()
188     print('#' * 50)
189     fetchone_test()
190     print('#' * 50)
191     delete_test()
192     print('#' * 50)
193     fetchall_test()
194     print('#' * 50)
195     deleteall_test()
196     print('#' * 50)
197     fetchall_test()
198     
199 if __name__ == '__main__':
200     main()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM