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

[转]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. 牛客网Java刷题知识点之Java为什么不能支持多继承,但可以用接口来间接实现多继承

    不多说,直接上干货! java只支持单继承,这是由于安全性的考虑,如果子类继承的多个父类里面有相同的方法或者属性,子类将不知道具体要继承哪个,而接口可以多实现,是因为接口只定义方法,而没有具体的逻辑实 ...

  2. JVM垃圾回收机制三

    垃圾回收器 分代垃圾回收常见的垃圾回收器 判断一个垃圾回收器好坏的标准 1.吞吐量越高越好 2.工作线程暂停时间越短越好. Serial垃圾回收器 串行回收器时最古老的最基本的垃圾回收器,工作线程会产 ...

  3. Django数据库创建与查询及ORM的概念

    ORM:是封装在pymysql上层的文件.他的作用是把python语句转换成sql语句,从而去数据库里操作数据.从数据库里获得的数据,经过orm转换为对象,对象可以直接调用属性获得值.orm本质是个中 ...

  4. arcgis jsapi接口入门系列(4):用代码在地图画点线面

    PS:用代码画点这样写是为了跟后面的用鼠标画点线面区分出来 画点 drawPointGraphic: function () { //点有多种样式:一般的点,显示文字,显示图片 //一般的点 let ...

  5. 重置Cacti密码

    Cacti登录密码忘记,重置Cacti密码 用root用户进入系统 [root@localhsot]# mysql -u root -p mysql> show databases; mysql ...

  6. nl

    -b -b -a 表示不论是否为空行,也同样列出行号 -b -t 如果用空行,空行不要列出行号 -n 列出行号表示方法,主要有3中 -n -n ln 行号显示在屏幕的最左方显示 -n rn 行号显示在 ...

  7. 如何找到SAP Cloud for Customer标准培训和认证方面的信息

    有一些朋友询问我如何在SAP官网上找到和SAP Cloud for Customer相关的标准培训信息,我这里把步骤写出来: 登录SAP官网https://training.sap.com 输入和Cl ...

  8. 微信程序开发系列教程(四)使用微信API创建公众号自定义菜单

    大家可能经常看到一些微信公众号具有功能强大的自定义菜单,点击之后可以访问很多有用的功能. 这篇教程就教大家如何动手做一做. 这个教程最后实现的效果是:创建一个一级菜单"UI5", ...

  9. Vue相关问题

    1. 说一下Vue的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的 setter, ...

  10. java反序列化字节转字符串工具

    https://github.com/NickstaDB/SerializationDumper SerializationDumper-v1.1.jar 用法 : java -jar Seriali ...