1. '''
  2. python中的shelve模块,可以提供一些简单的数据操作
  3. 他和python中的dbm很相似。
  4.  
  5. 区别如下:
  6. 都是以键值对的形式保存数据,不过在shelve模块中,
  7. key必须为字符串,而值可以是python所支持的数据
  8. 类型。在dbm模块中,键值对都必须为字符串类型。
  9.  
  10. sh['a'] = 'a'
  11. sh['c'] = [11, 234, 'a']
  12. sh['t'] = ('1', '2', '3')
  13. sh['d'] = {'a':'2', 'name':'Hongte' }
  14. sh['b'] = 'b'
  15. sh['i'] = 23
  16.  
  17. 我们可以获取一个shelve对象
  18. sh = shelve.open('c:\\test\\hongten.dat', 'c')
  19.  
  20. 删除shelve对象中的某个键值对
  21. del sh['d']
  22.  
  23. 遍历所有数据
  24. for item in sh.items():
  25. print('键[{}] = 值[{}]'.format(item[0], sh[item[0]]))
  26.  
  27. 获取某个键值对
  28. print(sh['a'])
  29.  
  30. 关闭shelve对象:
  31. sh.close()
  32.  
  33. ####################################################
  34. #### API中强调
  35. Do not rely on the shelf being closed automatically;
  36. always call close() explicitly when you don’t need
  37. it any more, or use a with statement with
  38. contextlib.closing().
  39. ####################################################
  40.  
  41. '''

下面是我做的demo,在demo中我做了比较详细的注释和说明,详情如下:

运行效果:

SHOW_LOG = False

  1. Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
  2. Type "copyright", "credits" or "license()" for more information.
  3. >>> ================================ RESTART ================================
  4. >>>
  5. SHOW_LOG : False
  6. 删除所有数据...
  7. 保存数据...
  8. ##################################################
  9. 遍历所有数据...
  10. 数据[gender] = [M]
  11. 数据[phone] = [('13423****62', '18998****62')]
  12. 数据[age] = [22]
  13. 数据[name] = [Hongten]
  14. 数据[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
  15. ##################################################
  16. 更新数据...
  17. ##################################################
  18. 遍历所有数据...
  19. 数据[gender] = [M]
  20. 数据[phone] = [('13423****62', '18998****62', '020-90909090')]
  21. 数据[name] = [Hongten]
  22. 数据[hoby] = [('篮球', '羽毛球', '乒乓球', '游泳')]
  23. 数据[age] = [23]
  24. 数据[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
  25. ##################################################
  26. 获取某个数据...
  27. 获取[address]的值:{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}
  28. ##################################################
  29. 删除某个数据...
  30. ##################################################
  31. 遍历所有数据...
  32. 数据[gender] = [M]
  33. 数据[phone] = [('13423****62', '18998****62', '020-90909090')]
  34. 数据[age] = [23]
  35. 数据[name] = [Hongten]
  36. 数据[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
  37. ##################################################
  38. 删除所有数据...
  39. ##################################################
  40. 遍历所有数据...
  41. >>>

SHOW_LOG = True

  1. Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
  2. Type "copyright", "credits" or "license()" for more information.
  3. >>> ================================ RESTART ================================
  4. >>>
  5. SHOW_LOG : True
  6. 删除所有数据...
  7. 保存数据...
  8. 保存数据[age] = [22]
  9. 保存数据[gender] = [M]
  10. 保存数据[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
  11. 保存数据[phone] = [('13423****62', '18998****62')]
  12. 保存数据[name] = [Hongten]
  13. ##################################################
  14. 遍历所有数据...
  15. 数据[age] = [22]
  16. 数据[name] = [Hongten]
  17. 数据[gender] = [M]
  18. 数据[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
  19. 数据[phone] = [('13423****62', '18998****62')]
  20. ##################################################
  21. 更新数据...
  22. 更新数据[name] = [Hongten]
  23. 更新数据[hoby] = [('篮球', '羽毛球', '乒乓球', '游泳')]
  24. 更新数据[phone] = [('13423****62', '18998****62', '020-90909090')]
  25. 更新数据[age] = [23]
  26. ##################################################
  27. 遍历所有数据...
  28. 数据[age] = [23]
  29. 数据[gender] = [M]
  30. 数据[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
  31. 数据[hoby] = [('篮球', '羽毛球', '乒乓球', '游泳')]
  32. 数据[phone] = [('13423****62', '18998****62', '020-90909090')]
  33. 数据[name] = [Hongten]
  34. ##################################################
  35. 获取某个数据...
  36. 获取[address]的值:{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}
  37. ##################################################
  38. 删除某个数据...
  39. 删除[hoby]的数据
  40. ##################################################
  41. 遍历所有数据...
  42. 数据[age] = [23]
  43. 数据[name] = [Hongten]
  44. 数据[gender] = [M]
  45. 数据[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
  46. 数据[phone] = [('13423****62', '18998****62', '020-90909090')]
  47. ##################################################
  48. 删除所有数据...
  49. 删除数据[age] = [23]
  50. 删除数据[gender] = [M]
  51. 删除数据[address] = [{'hometown': 'Shuifu,Yunnan', 'nowadd': 'Guangzhou,Guangdong'}]
  52. 删除数据[phone] = [('13423****62', '18998****62', '020-90909090')]
  53. 删除数据[name] = [Hongten]
  54. ##################################################
  55. 遍历所有数据...
  56. >>>

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

代码部分:

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

  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()

python开发_shelve_完整版_博主推荐的更多相关文章

  1. python开发_zlib_完整版_博主推荐

    ''' python中的zlib模块提供了压缩和解压缩的方法 实现功能: 读取一个文件的内容,然后把该文件的内容以字符串的形式返回 然后对返回回来的字符串进行压缩处理,然后写入到另一个文件中 同时,也 ...

  2. python开发_xml.dom_解析XML文档_完整版_博主推荐

    在阅读之前,你需要了解一些xml.dom的一些理论知识,在这里你可以对xml.dom有一定的了解,如果你阅读完之后. 下面是我做的demo 运行效果: 解析的XML文件位置:c:\\test\\hon ...

  3. python开发_configparser_解析.ini配置文件工具_完整版_博主推荐

    # # 最近出了一趟差,是从20号去的,今天回来... # 就把最近学习的python内容给大家分享一下... # ''' 在python中,configparser模块提供了操作*.ini配置文件的 ...

  4. python开发_csv(Comma Separated Values)_逗号分隔值_常用导入导出格式_完整版_博主推荐

    ## 最近出了一趟差,是从20号去的,今天回来...# 就把最近学习的python内容给大家分享一下...#''' 在python中,CSV(Comma Separated Values),从字面上面 ...

  5. python开发_gzip_压缩|解压缩gz文件_完整版_博主推荐

    ''' gzip -- 支持gzip文件 源文件:Lib/gzip.py 这个模块提供了一些简单的接口来对文件进行压缩和解压缩,类似于GNU项目的gzip和gunzip. 数据的压缩源于zlib模块的 ...

  6. python开发_sqlite3_绝对完整_博主推荐

    '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不 ...

  7. python开发_copy(浅拷贝|深拷贝)_博主推荐

    在python中,有着深拷贝和浅拷贝,即copy模块 下面我们就来聊一下: 运行效果: ================================================== 代码部分: ...

  8. [转]python开发_shelve_完整版

    ''' python中的shelve模块,可以提供一些简单的数据操作 他和python中的dbm很相似. 区别如下: 都是以键值对的形式保存数据,不过在shelve模块中, key必须为字符串,而值可 ...

  9. python开发_tkinter_菜单选项中英文切换_菜单选项不可用操作_博主推荐

    我使用的python版本为:3.3.2 如果你对python中tkinter模块的菜单操作不是很了解,你可以看看: python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推 ...

随机推荐

  1. php常用函数——数学函数

    php常用函数——数学函数

  2. 学习Python函数笔记之二(内置函数)

    ---恢复内容开始--- 1.内置函数:取绝对值函数abs() 2.内置函数:取最大值max(),取最小值min() 3.内置函数:len()是获取序列的长度 4.内置函数:divmod(x,y),返 ...

  3. php查询mysql返回大量数据结果集导致内存溢出的解决方法

    web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答 ...

  4. flask基础之安装和使用入门(一)

    前言 Flask框架作为一个python极简化的web框架,它不像Django那样的重型,非常适合快速开发一些小型的应用.本人用flask开发了几个项目之后,慢慢研究flask底层的一些原理,开始一步 ...

  5. xargs -i 和-I 的区别【转】

    xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如  # find . -type f -name "*.log" | xargs rm -rf * ...

  6. 343.Integer Break---dp

    题目链接:https://leetcode.com/problems/integer-break/description/ 题目大意:给定一个自然数,将其分解,对其分解的数作乘积,找出最大的乘积结果. ...

  7. 让MySql支持Emoji表情存储

    java后台报错,如下. aused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for column ...

  8. php 高并发解决方案(用于抢购) 转载

    最近在做一个团购项目,遇到个问题,就是在抢购.秒杀.抽奖等活动时,库存数量有限,但是同时下单人数超过了库存数量,就会导致商品超售问题.那么我们怎么来解决这个问题呢,我的思路如下: sql1:查询商品库 ...

  9. Codeforces 813B The Golden Age(数学+枚举)

    题目大意:如果一个数t=x^a+y^b(a,b都是大于等于0的整数)那就是一个unlucky数字.给你x,y,l,r(2 ≤ x, y ≤ 10^18, 1 ≤ l ≤ r ≤ 10^18),求出l到 ...

  10. fiddler添加监测请求的 ip地址

    本文转载自:http://www.jackness.org/2014/12/26/%E7%BB%99fiddler%E6%B7%BB%E5%8A%A0%E7%9B%91%E6%B5%8B%E8%AF% ...