'''
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. js面向对象之:创建对象

    最近在学习<js高级程序设计>,之前所接触的很多的js类库和jQuery插件都会用面向对象的方式来设计,而自己却还是停留在面向方法的阶段,所以今天好好记录一下学习的js创建对象. 第一种方 ...

  2. 《Effective C++》第4章 设计与声明(1)-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  3. java 静态代理 JDK动态代理 Cglib动态代理

    下面以一个简单的银行账户为例讲述讲述动态代理. 设计一个银行账户类,包含用户的账户余额,实现查询和更新余额功能 这个系统用了一段时间,有客户要求对账说账户余额给弄错了?因为上面没有存取款记录,最后银行 ...

  4. 查询表名及列名长度超过一定长度的SQL

    apple=# select * from (select a.relname, char_length(a.relname) as tb_name_length, b.attname, char_l ...

  5. c++多线程编程:实现标准库accumulate函数的并行计算版本

    今天使用c++实现了标准库头文件<numeric>中的accumulate函数的并行计算版本,代码如下,注释写的比较详细,仅对其中几点进行描述: ①该实现假定不发生任何异常,故没有对可能产 ...

  6. mac svn: E210004: Number is larger than maximum

    SVN服务器IP地址发现改变,在Eclipse中的SVN资源库中执行Relocate重定位时发生错误: mac svn: E210004: Number is larger than maximum ...

  7. EasyDSS流媒体服务器实现RTMP直播同步HLS录像和时移回放

    本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/74166337 "目前在市面上可以找到的 ...

  8. Vim技能修炼教程(5) - 操作符实务

    操作符实务 操作符复习 上次我们讲了操作符与文本对象的组合这样一个vim的强大功能.但是上节的知识点过于密集,可读性可能差了一点.不过没关系,重要的知识点在后面用到的时候我们可以先复习一下. 我们还是 ...

  9. IOS开发 __weak与__block修饰符到底有什么区别

    API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables ...

  10. Java中高级面试题整理

    一.基础知识: 1)集合类:List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList:HashSet,TreeSet): 2)HashMap的底层实现,之后会问Co ...