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

shelve模块(超级好用~!)的更多相关文章

  1. json、pickle\shelve模块(超级好用~!)讲解

    json.pickle模块讲解 见我前面的文章:http://www.cnblogs.com/itfat/p/7456054.html shelve模块讲解(超级好用~!) json和pickle的模 ...

  2. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  3. python pickle 和 shelve模块

    pickle和shelve模块都可以把python对象存储到文件中,下面来看看它们的用法吧 1.pickle 写: 以写方式打开一个文件描述符,调用pickle.dump把对象写进去 dn = {'b ...

  4. shelve模块

    #coding:utf-8 __author__ = 'similarface' #email:similarface@outlook.com ''' shelve模块: 映射容器 存储对象,被存储的 ...

  5. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  6. 小白的Python之路 day5 shelve模块讲解

    shelve模块讲解 一.概述 之前我们说不管是json也好,还是pickle也好,在python3中只能dump一次和load一次,有什么方法可以向dump多少次就dump多少次,并且load不会出 ...

  7. python之shelve模块详解

    一.定义 Shelve是对象持久化保存方法,将对象保存到文件里面,缺省(即默认)的数据存储文件是二进制的. 二.用途 可以作为一个简单的数据存储方案. 三.用法 使用时,只需要使用open函数获取一个 ...

  8. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  9. os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法

    一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...

随机推荐

  1. SpringAnnotation注解之@Resource

    @Resource:同样也是注入,默认是按byName,byName找不到的话按byType 1 2 3 4 @Resource public void setUserDao(UserDao user ...

  2. android mvp RxJava 框架结构分析

    一个MVP结构:M是model,V是Fragment,P是提供者,P持有V和Model,控制获取数据并给V赋值.(结合了RXJava Retrofit和okHttp)

  3. 马士兵_JAVA自学之路(为那些目标模糊的码农们)

    转载自:http://blog.csdn.net/anlidengshiwei/article/details/42264301 JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. ...

  4. Android编程 高德地图 中如何重写 定位按键 的触发事件 (com.amap.api.maps2d.LocationSource)点击定位后不仅定位在地图中心点上而且可以设置地图的缩放大小和提示

    在利用高德地图来编写自己的APP的时候,发现了一种对定位按键的重写方法,那就是利用   com.amap.api.maps2d.LocationSource  接口来重写. 什么是定位按键呢,下图中右 ...

  5. fedora 27

    安装 U盘安装,感谢学长的U盘 配置 安装外来软件的时候,需要输入root密码 软件 软件安装是个麻烦事儿啊 详情 [新手指南: 在 Ubuntu 和 Fedora 上安装软件包] Fedora 中文 ...

  6. js之无缝轮播图

      HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  7. MySQL中的锁理解

    1.目的:解决客户端并发访问的冲突问题 2.锁的分类 1.锁类型 1.读锁(共享锁) 查询(select):加读锁之后,别人不能更改表记录,但是可以进行查询. 2.写锁(互斥锁,排他锁) 更新(upd ...

  8. sync-settings(vscode)

    vscode插件以及设置 sync-download e45c6db33cd91d661e0cc545efb6817c

  9. BZOJ2565 最长双回文串 【Manacher】

    BZOJ2565 最长双回文串 Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"c ...

  10. apache与nginx对比优势及劣势

    1.nginx相对于apache的优点:轻量级,同样起web 服务,比apache占用更少的内存及资源抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能 ...