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

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. php获取excel文件数据

    很简单就可以实现,下面为大家简单介绍下 1.下载PHPExcel类,是一个文件夹,还得有一个文件PHPExcel.php,两个在同级目录 require __DIR__ . './PHPExcel/I ...

  2. linux和windows双系统设置默认启动系统

    1.以root身份登录linux系统: 2.启动终端,输入命令:vi /boot/grub/grub.conf,文件内容如下: #boot=/dev/sda default=0 (默认启动哪个系统的设 ...

  3. Android 贝塞尔曲线解析

    相信很多同学都知道"贝塞尔曲线"这个词,我们在很多地方都能经常看到.利用"贝塞尔曲线"可以做出很多好看的UI效果,本篇博客就让我们一起学习"贝塞尔曲线 ...

  4. Unity3D 屏幕空间雪场景Shader渲染

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...

  5. 海思arm平台AAC音频转码cpu占用高、效率低的问题解决

    问题背景 目前市面上的大部分IPC摄像机音频输出基本都是G711.G726编码格式,而在类似于<基于EasyNVR实现RTSP/Onvif监控摄像头Web无插件化直播监控>这种业务中,都是 ...

  6. python常用模块之xml模块

    python常用模块之xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,在json还没诞生的年代,大家都是使用xml,目前很多传统公司的系 ...

  7. vue做路由页面内容跳转

    安装----npm npm install vue-router 如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能: import Vue from 'vue' imp ...

  8. Redis学习总结之三——Redis客户端命令

    Windows命令行启动Redis客户端 1. 使用默认IP地址和端口连接Redis数据库(IP地址:127.0.0.1,端口号6379) redis-cli 2. 使用指定IP地址和端口连接Redi ...

  9. Mini Stirling engine

    So I spent 5 or 6 hours last night trying to hook up a mini Stirling engine with the gearbox of a Ta ...

  10. WebStorm的主题与设置

    1.  Webstorm主题风格选择 2.  Webstorm字体字号配置 3.  Webstorm快捷键的查找 4.  Webstorm插件的安装