zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    个性化离线实时分析系统pora
    关于android上的定位
    Enthought Python Distribution :: Products :: Enthought, Inc.
    刘思喆@贝吉塔行星
    Bio and Geo Informatics: kmeans clustering in scipy
    RDataMining.com: R and Data Mining
    First steps in text mining with R
    “逻辑回归” 和 "线性回归" 的关系
    crontab 每月执行一次怎么写? Linux系统管理 ChinaUnix.net
    RDataMining.com: R and Data Mining
  • 原文地址:https://www.cnblogs.com/hongten/p/hongten_python_shelve.html
Copyright © 2011-2022 走看看