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

[转]python开发_shelve_完整版的更多相关文章

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

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

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

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

  3. Python入门教程完整版(懂中文就能学会)

    前几天给大家分享<从零学会Photoshop经典教程300集>的教程受到了广泛的关注,有人不知道怎么领取,居然称小编为"骗子". 不过小编的内心是强大的,网友虐我千百遍 ...

  4. macOS 10.13 High Sierra odoo11 开发配置--完整版

    1.抹盘安装macOS Sierra 10.13: 制作macOS安装启动盘参见:http://www.iplaysoft.com/macos-usb-install-drive.html 2.安装g ...

  5. 使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版(二)——部署配置及相关知识

    ---恢复内容开始--- 一.前提: 1.django项目文件已放置在云服务器上,配置好运行环境,可正常运行 2.云服务器可正常连接 二.相关知识 1.python manage.py runserv ...

  6. Knockout中文开发指南(完整版API中文文档) 目录索引

    a, .tree li > span { padding: 4pt; border-radius: 4px; } .tree li a { color:#46cfb0; text-decorat ...

  7. 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】

    老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...

  8. 虹软最新版 python 接口 完整版

    虹软最新版 python 接口 完整版 当前开源的人脸检测模型,识别很多,很多小伙伴也踩过不少坑.相信不少使用过dlib和facenet人脸识别的小伙伴都有这样的疑惑,为什么论文里高达99.8以上的准 ...

  9. Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘

    Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:g7v1 作者简介 作为全球Python培训界的领军人物,<Python学习手册:第4版>作者M ...

随机推荐

  1. 排序算法(C语言+Python版)宝宝再也不怕面试官写排序算法了

    直接插入排序 过程: 1. 数据可分看成两个部分,前面的数据是有序的 2. 从后面的数据取出一个元素,插到前面有序数据的合适位置 从右端开始查找,到找到比此元素大的时候,则此元素向后移动,以空出多余的 ...

  2. jsp动态图片页面基础

    1. 什么是动态网页? 动态网页是指在服务器端运行的程序或者网页,它们会随不同客户.不同时间,返回不同的网页. 注意:在静态网页中插入flash ,虽然flash是在动的,但是并不是说这个网页就是动态 ...

  3. puppeteer 中国区的使用

    puppeteer 中国区的使用 [issues]https://github.com/GoogleChrome/puppeteer/issues/1426 两种方案 使用 cnpm .npmrc 中 ...

  4. asp.net excel导出红色字体

    文章转自网上的一位朋友,非常感谢! 后台代码 public void ExportDataTableToExcel(System.Data.DataTable s_DataTable) { int t ...

  5. 搭建高可用mongodb集群—— 副本集

    转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB& ...

  6. 前端常用的jquery代码

    主要是个人在工作中常用到的一些代码,会慢慢添加: 1).enter键时可以触发某些事件,比如登陆事件: $('#loginform').bind('keypress',function(event){ ...

  7. flex常用属性

    <1>align-items: 垂直方向的对齐方式 align-items: stretch(拉伸,布满父容器) | center(垂直居中) | flex-start(上对齐) | fl ...

  8. Vue的elementUI实现自定义主题

    使用vue开发项目,用到elementUI,根据官网的写法,我们可以自定义主题来适应我们的项目要求,下面来介绍一下两种方法实现的具体步骤,(可以参考官方文档自定义主题官方文档),先说项目中没有使用sc ...

  9. 修改visual studio setup 安装顺序(解决新版安装包无法自动移除老版本程序的问题)

    背景 visual studio setup 支持自动删除之前版本的安装,需要设置RemovePreviousVersions = true, DetectNewerInstalledVersion ...

  10. Bootstrap历练实例:表单控件状态(禁用)

    禁用的输入框 input 如果您想要禁用一个输入框 input,只需要简单地添加 disabled 属性,这不仅会禁用输入框,还会改变输入框的样式以及当鼠标的指针悬停在元素上时鼠标指针的样式. < ...