'''
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]
##################################################
遍历所有数据...
>>>

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

代码部分:

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

 #python shelve

 #Author : Hongten
#MailTo : hongtenzone@foxmail.com
#QQ : 648719819
#Blog : http://www.cnblogs.com/hongten
#Create : 2013-08-09
#Version: 1.0 import 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().
#################################################### '''
#global var
#是否显示日志信息
SHOW_LOG = True def get_shelve():
'''open -- file may get suffix added by low-level library'''
return shelve.open('c:\\test\\hongten.dat', 'c') def save(sh):
'''保存数据'''
if sh is not None:
sh['name'] = 'Hongten'
sh['gender'] = 'M'
sh['address'] = {'hometown' : 'Shuifu,Yunnan', 'nowadd' : 'Guangzhou,Guangdong'}
sh['phone'] = ('13423****62', '18998****62')
sh['age'] = 22
if SHOW_LOG:
for item in sh.items():
print('保存数据[{}] = [{}]'.format(item[0], sh[item[0]]))
sh.close()
else:
print('the shelve object is None!') def update(sh):
'''更新数据'''
if sh is not None:
sh['name'] = 'Hongten'
sh['hoby'] = ('篮球', '羽毛球', '乒乓球', '游泳')
sh['phone'] = ('13423****62', '18998****62', '020-90909090')
sh['age'] = 23
if SHOW_LOG:
keys = ('name', 'hoby', 'phone', 'age')
for item in keys:
print('更新数据[{}] = [{}]'.format(item, sh[item]))
sh.close()
else:
print('the shelve object is None!') def delete(sh, key):
'''删除某个数据'''
if sh is not None:
if SHOW_LOG:
print('删除[{}]的数据'.format(key))
del sh[key]
sh.close()
else:
print('the shelve object is None!') def deleteall(sh):
'''删除所有数据'''
if sh is not None:
for item in sh.items():
if SHOW_LOG:
print('删除数据[{}] = [{}]'.format(item[0], sh[item[0]]))
del sh[item[0]]
sh.close()
else:
print('the shelve object is None!') def fetchone(sh, key):
'''获取某个数据'''
if sh is not None:
print('获取[{}]的值:{}'.format(key, sh[key]))
sh.close()
else:
print('the shelve object is None!') def fetchall(sh):
'''遍历所有数据'''
if sh is not None:
for item in sh.items():
print('数据[{}] = [{}]'.format(item[0], sh[item[0]]))
sh.close()
else:
print('the shelve object is None!') ###############################################################
### 测试 START
###############################################################
def save_test():
'''保存数据...'''
print('保存数据...')
sh = get_shelve()
save(sh) def fetchall_test():
'''遍历所有数据'''
print('遍历所有数据...')
sh = get_shelve()
fetchall(sh) def fetchone_test():
'''获取某个数据'''
print('获取某个数据...')
sh = get_shelve()
key = 'address'
fetchone(sh, key) def delete_test():
'''删除某个数据'''
print('删除某个数据...')
sh = get_shelve()
key = 'hoby'
delete(sh, key) def update_test():
'''更新数据...'''
print('更新数据...')
sh = get_shelve()
update(sh) def deleteall_test():
'''删除所有数据'''
print('删除所有数据...')
sh = get_shelve()
deleteall(sh) ###############################################################
### 测试 END
############################################################### def init():
global SHOW_LOG
SHOW_LOG = True
print('SHOW_LOG : {}'.format(SHOW_LOG))
deleteall_test()
save_test() def main():
init()
print('#' * 50)
fetchall_test()
print('#' * 50)
update_test()
print('#' * 50)
fetchall_test()
print('#' * 50)
fetchone_test()
print('#' * 50)
delete_test()
print('#' * 50)
fetchall_test()
print('#' * 50)
deleteall_test()
print('#' * 50)
fetchall_test() if __name__ == '__main__':
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. Python作业选课系统(第六周)

    作业需求: 角色:学校.学员.课程.讲师.完成下面的要求 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 ...

  2. 树的直径(两个bfs)

    题目链接:https://cn.vjudge.net/problem/POJ-2631 树的直径:树中的最长链 具体思路:随便找一个点bfs,然后找到最长的链,然后再以找到的点作为起点进行bfs,然后 ...

  3. Dull Chocolates Gym - 101991D 离散化 前缀和

    题目链接:https://vjudge.net/problem/Gym-101991D 具体思路:首先看数据范围,暴力肯定不可以,可以下离散化,然后先求出离散化后每一个点到(1,1)的符合题目的要求的 ...

  4. 自己看之区间DP

    //菜鸡制作,看的时候可能三目运算符略烦;;; 区间DP入门题:Brackets 地址:http://59.77.139.92/Problem.jsp?pid=1463 分析(对区间DP的代码原理进行 ...

  5. RF, GBDT, XGB区别

    GBDT与XGB区别 1. 传统GBDT以CART作为基分类器,xgboost还支持线性分类器(gblinear),这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回 ...

  6. Jmeter命令行选项

    示例:jmeter.bat -n -j %tmp%\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~ ...

  7. 集合框架之Map学习

    Map接口的实现类有HashTable.HashMap.TreeMap等,文章学习整理了“ Map和HashMap的使用方法”. /** * Map和HashMap的使用方法 */public sta ...

  8. 制作一棵ztree

    我们在做web项目时,常会用到一些树形菜单.在此,我们利用ztree实现树形菜单的效果.zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTr ...

  9. [ python ] 面向对象 - 选课系统

    根据源程序进行改写:    原程序地址:http://www.cnblogs.com/lianzhilei/p/5985333.html  如有侵权立即删除.    感谢原作者将完整的代码提供参考.  ...

  10. POJ 1661 Help Jimmy(二维DP)

    题目链接:http://poj.org/problem?id=1661 题目大意: 如图包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的 ...