'''
在python的应用程序中,不需要关系型数据库时,如MySQL
可以使用python提供的持久字典dbm来存储名称和值(键值对)
这个类似于java的中的java.util.Map对象。
区别如下: 存储在硬盘上面
dbm的键值对必须是字符串类型 python支持的dbm模块 dbm -- 常用的dbm模块
dbm.dumb -- 可移植的,简单的dbm库
dbm.gnu -- GNU dbm库 创建一个dbm对象
db = dbm.open('c:\\test\\Hongten.pag', 'c') 'r' -- open existing database for reading only(default)
'w' -- open existing database for reading and writing
'c' -- open database for reading and writing,creating it if it does'n exist
'n' -- always creat a new,empty database,open for reading and writing 给dbm对象赋值,dbm中的键值对都是以字符串形式出现
db['name'] = 'Hongten'
db['gender'] = 'M' 保存,在dbm对象关闭的时候即可保存数据
db.close() 删除值:
del db['name']
会把db对象中的key = 'name'的值删除 遍历整个db对象:
for key in db.keys():
print(key) '''

运行效果:

运行后,会在:c:\test目录下面出现:

Hongten.pag.bak

Hongten.pag.dat

Hongten.pag.dir

三个文件

输出部分:

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 ================================
>>>
保存数据...
##################################################
遍历所有数据...
b'name' = b'Hongten'
b'gender' = b'M'
b'address' = b'\xe5\xb9\xbf\xe4\xb8\x9c\xe7\x9c\x81\xe5\xb9\xbf\xe5\xb7\x9e\xe5\xb8\x82'
##################################################
获取[name]键值对数据...
b'Hongten'
##################################################
删除[gender]键值对数据...
遍历所有数据...
b'name' = b'Hongten'
b'address' = b'\xe5\xb9\xbf\xe4\xb8\x9c\xe7\x9c\x81\xe5\xb9\xbf\xe5\xb7\x9e\xe5\xb8\x82'
##################################################
删除所有键值对数据...
遍历所有数据...
>>>

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

代码部分:

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

 #python dbm

 #Author : Hongten
#MailTo : hongtenzone@foxmail.com
#QQ : 648719819
#Blog : http://www.cnblogs.com/hongten
#Create : 2013-08-09
#Version: 1.0 import dbm
'''
在python的应用程序中,不需要关系型数据库时,如MySQL
可以使用python提供的持久字典dbm来存储名称和值(键值对)
这个类似于java的中的java.util.Map对象。
区别如下: 存储在硬盘上面
dbm的键值对必须是字符串类型 python支持的dbm模块 dbm -- 常用的dbm模块
dbm.dumb -- 可移植的,简单的dbm库
dbm.gnu -- GNU dbm库 创建一个dbm对象
db = dbm.open('c:\\test\\Hongten.pag', 'c') 'r' -- open existing database for reading only(default)
'w' -- open existing database for reading and writing
'c' -- open database for reading and writing,creating it if it does'n exist
'n' -- always creat a new,empty database,open for reading and writing 给dbm对象赋值,dbm中的键值对都是以字符串形式出现
db['name'] = 'Hongten'
db['gender'] = 'M' 保存,在dbm对象关闭的时候即可保存数据
db.close() 删除值:
del db['name']
会把db对象中的key = 'name'的值删除 遍历整个db对象:
for key in db.keys():
print(key) ''' db = dbm.open('c:\\test\\Hongten.pag', 'c') def get_dbm():
'''Open database, creating it if necessary.'''
return dbm.open('c:\\test\\Hongten.pag', 'c') def save(db):
'''保存数据'''
print('保存数据...')
db['name'] = 'Hongten'
db['gender'] = 'M'
db['address'] = '广东省广州市'
db.close() def fetchall(db):
'''遍历所有'''
print('遍历所有数据...')
if db is not None:
for key in db.keys():
print('{} = {}'.format(key, db[key]))
else:
print('dbm object is None!') def fetchone(db, key):
'''获取某个键值对'''
print('获取[{}]键值对数据...'.format(key))
if db is not None:
print(db[key])
else:
print('dbm object is None!') def delete(db, key):
'''删除某个键值对'''
print('删除[{}]键值对数据...'.format(key))
if db is not None:
del db[key]
else:
print('dbm object is None!') def deleteall(db):
'''删除所有键值对'''
print('删除所有键值对数据...')
if db is not None:
for key in db.keys():
del db[key]
else:
print('dbm object is None!') def main():
db = get_dbm()
save(db)
print('#' * 50)
db = get_dbm()
fetchall(db)
print('#' * 50)
fetchone(db, 'name')
print('#' * 50)
delete(db, 'gender')
fetchall(db)
print('#' * 50)
deleteall(db)
fetchall(db) if __name__ == '__main__':
main()

python开发_dbm_键值对存储_完整_博主推荐的更多相关文章

  1. Eclipse的企业开发时常用快捷键使用、优化配置(博主推荐)

    不多说,直接上干货! 一.简介 eclipse可谓是Java开发界的神器,基本占据了大部分的Java开发市场,而且其官方还对其他语言提供支持,如C++,Ruby,JavaScript等等.为什么使用它 ...

  2. 实现键值对存储(三):Kyoto Cabinet 和LevelDB的架构比較分析

    译自  Emmanuel Goossaert (CodeCapsule.com) 在本文中,我将会逐组件地把Kyoto Cabinet 和 LevelDB的架构过一遍.目标和本系列第二部分讲的差点儿相 ...

  3. python开发_tkinter_菜单选项中英文切换_菜单选项不可用操作_博主推荐

    我使用的python版本为:3.3.2 如果你对python中tkinter模块的菜单操作不是很了解,你可以看看: python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推 ...

  4. python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐(二)

    在上一篇blog:python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 中介绍了python中的tkinter的一些东西,你可能对tkinter有一定的了解了.这篇b ...

  5. 探索etcd,Zookeeper和Consul一致键值数据存储的性能

    这篇博文是探索三个分布式.一致性键值数据存储软件性能的系列文章中的第一篇:etcd.Zookeeper和Consul,由etcd团队所写,可以让我们全面地了解如何评估三个分布式一致存储软件的性能.翻译 ...

  6. Python 字典(键值对)

    Python 字典(键值对) 创建字典 特性:字典中的键不能变,而且唯一 格式:变量名={"键1":值1,"键2":值2} 函数 作用 dict() 强制转换为 ...

  7. python 对redis 键值对的操作

    我们可以将Redis中的Hashes类型看成具有String Key和String Value的键值对容器.类似python中的dict,javascript的jaon,java 的map,每一个Ha ...

  8. map集合键值对存储,键值不重复,值可以重复

    import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.Li ...

  9. python开发_shelve_完整版_博主推荐

    ''' python中的shelve模块,可以提供一些简单的数据操作 他和python中的dbm很相似. 区别如下: 都是以键值对的形式保存数据,不过在shelve模块中, key必须为字符串,而值可 ...

随机推荐

  1. struts集合类型封装

    1.list类型封装

  2. sqlite3_get_table()

    { sqlite3 *db; char *errmsg=NULL;    //用来存储错误信息字符串 char ret=0; int my_age=0;    //类型根据要提取的数据类型而定 cha ...

  3. Tomcat参数调优包括日志、线程数、内存【转】

    [Tomcat中日志打印对性能测试的影响] 一般都提供了这样5个日志级别: ▪ Debug ▪ Info ▪ Warn ▪ Error ▪ Fatal 由于性能测试需要并发进行压力测试,如果日志级别是 ...

  4. Tomcat: Connector中HTTP与AJP差别与整合

    apache tomcat 整合(ajp proxy, http proxy) 1.软件: apache: httpd-2.2.17-win32-x86-openssl-0.9.8o.msi tomc ...

  5. Linux系统调优及安全设置

    1.关闭SELinux #临时关闭 setenforce 0 #永久关闭 vim /etc/selinux/config SELINUX=disabled 2.设定运行级别为3 #设定运行级别 vim ...

  6. rpmdb: Thread/process 9180/139855524558592 failed: Thread died in Berkeley DB library

    使用yum安装出现问题:rpmdb: Thread/process 9180/139855524558592 failed: Thread died in Berkeley DB library 解决 ...

  7. css给奇数行或偶数行添加指定样式

    odd表示奇数行,even表示偶数行; tr:nth-child(odd); .table-striped > tbody > tr:nth-child(odd) { background ...

  8. mysql 操作时间戳

    1.将long显示成时间 SELECT FROM_UNIXTIME(1249488000, '%Y%m%d' ) 2.日期格式化成时间戳 SELECT UNIX_TIMESTAMP('2016-05- ...

  9. socket-----爬虫&&文件传输

    最近想着写几个小demo 写了一个爬虫,用的是C++,基本思想就是一层一层的找类似深搜吧,抓取的页面是www.cnblogs.com,从localhost发送request请求,给www.cnblog ...

  10. [Ext JS 4]后台自动产生图档

    前言 [Ext JS 4] 实战之将chart导出为png, jpg 格式的文件 承接上一篇, 我们可以做到在Browser端打开一个Chart,并导出为png或是jpg 等格式的图档. 但实际的需求 ...