'''
在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. ecshop代码修改后提交,无法立即生效

    今天帮一朋友部署一网站.成品的ecshop模版站.在搭建好xammp集成环境,导入数据库,修改配置文件后,报了一大堆错. 其中第一个是关于废弃preg_replace中/e这种用法的,因为存在漏洞,一 ...

  2. PHP文本式留言板——php经典实例

    文件结构: index.php 主页和添加页 show.php 查看留言页 ly.db 文本保存页 doAdd.php 添加功能页 doDel.php 删除功能页  index.php <htm ...

  3. Fiddler -工具使用介绍(附:拦截请求并修改返回数据)(转)

    一.Fiddler 介绍 Fiddler 是一个使用 C# 编写的 http 抓包工具.它使用灵活,功能强大,支持众多的 http 调试任务,是 web.移动应用的开发调试利器. 1,功能特点 同 H ...

  4. 背包DP FOJ 2214

    题目:http://acm.fzu.edu.cn/problem.php?pid=2214 (http://www.fjutacm.com/Problem.jsp?pid=2053) 这题看起来是一题 ...

  5. Perl6多线程3: Promise start / in / await

    创建一个Promise 并自动运行: my $p = Promise.start({say 'Hello, Promise!'}); 如果把代码改成如下, 我们会发现什么也没打印: ;say 'Hel ...

  6. [How to] HBase的bulkload使用方法

    1.简介 将数据插入HBase表中的方法很多,我们可以通过TableOutputFormat以Mapreduce on HBase的方式将数据插入,也可以单纯的使用客户端API将数据插入.但是以上方法 ...

  7. ansible报错Aborting, target uses selinux but python bindings (libselinux-python) aren't installed

    报错内容: TASK [activemq : jvm configuration] ********************************************************** ...

  8. BootStrap的table表格的基本写法

    代码如下: <!DOCTYPE html> <html> <head> <title>BootStrap的基础入门</title> < ...

  9. Educational Codeforces Round 25 D - Suitable Replacement(贪心)

    题目大意:给你字符串s,和t,字符串s中的'?'可以用字符串t中的字符代替,要求使得最后得到的字符串s(可以将s中的字符位置两两交换,任意位置任意次数)中含有的子串t最多. 解题思路: 因为知道s中的 ...

  10. Python抓取微博评论

    本人是张杰的小迷妹,所以用杰哥的微博为例,之前一直看的是网页版,然后在知乎上看了一个抓取沈梦辰的微博评论的帖子,然后得到了这样的网址 然后就用m.weibo.cn进行网站的爬取,里面的微博和每一条微博 ...