python开发_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)
    
'''

运行效果:

运行后,会在: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'
##################################################
删除所有键值对数据...
遍历所有数据...
>>> 

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

代码部分:

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

  1 #python dbm
  2 
  3 #Author : Hongten
  4 #MailTo : hongtenzone@foxmail.com
  5 #QQ     : 648719819
  6 #Blog   : http://www.cnblogs.com/hongten
  7 #Create : 2013-08-09
  8 #Version: 1.0
  9 
 10 import dbm
 11 '''
 12     在python的应用程序中,不需要关系型数据库时,如MySQL
 13     可以使用python提供的持久字典dbm来存储名称和值(键值对)
 14     这个类似于java的中的java.util.Map对象。
 15     区别如下:
 16 
 17         存储在硬盘上面
 18         dbm的键值对必须是字符串类型
 19 
 20     python支持的dbm模块
 21 
 22         dbm         -- 常用的dbm模块
 23         dbm.dumb    -- 可移植的,简单的dbm库
 24         dbm.gnu     -- GNU dbm库
 25 
 26     创建一个dbm对象
 27     db = dbm.open('c:\\test\\Hongten.pag', 'c')
 28 
 29         'r'         --  open existing database for reading only(default)
 30         'w'         --  open existing database for reading and writing
 31         'c'         --  open database for reading and writing,creating it if it does'n exist
 32         'n'         --  always creat a new,empty database,open for reading and writing
 33 
 34     给dbm对象赋值,dbm中的键值对都是以字符串形式出现
 35     db['name'] = 'Hongten'
 36     db['gender'] = 'M'
 37 
 38     保存,在dbm对象关闭的时候即可保存数据
 39     db.close()
 40 
 41     删除值:
 42     del db['name']
 43     会把db对象中的key = 'name'的值删除
 44 
 45     遍历整个db对象:
 46     for key in db.keys():
 47         print(key)
 48     
 49 '''
 50 
 51 db = dbm.open('c:\\test\\Hongten.pag', 'c')
 52 
 53 def get_dbm():
 54     '''Open database, creating it if necessary.'''
 55     return dbm.open('c:\\test\\Hongten.pag', 'c')
 56 
 57 def save(db):
 58     '''保存数据'''
 59     print('保存数据...')
 60     db['name'] = 'Hongten'
 61     db['gender'] = 'M'
 62     db['address'] = '广东省广州市'
 63     db.close()
 64 
 65 def fetchall(db):
 66     '''遍历所有'''
 67     print('遍历所有数据...')
 68     if db is not None:
 69         for key in db.keys():
 70             print('{} = {}'.format(key, db[key]))
 71     else:
 72         print('dbm object is None!')
 73 
 74 def fetchone(db, key):
 75     '''获取某个键值对'''
 76     print('获取[{}]键值对数据...'.format(key))
 77     if db is not None:
 78         print(db[key])
 79     else:
 80         print('dbm object is None!')
 81 
 82 def delete(db, key):
 83     '''删除某个键值对'''
 84     print('删除[{}]键值对数据...'.format(key))
 85     if db is not None:
 86         del db[key]
 87     else:
 88         print('dbm object is None!')
 89 
 90 def deleteall(db):
 91     '''删除所有键值对'''
 92     print('删除所有键值对数据...')
 93     if db is not None:
 94         for key in db.keys():
 95             del db[key]
 96     else:
 97         print('dbm object is None!')
 98 
 99 def main():
100     db = get_dbm()
101     save(db)
102     print('#' * 50)
103     db = get_dbm()
104     fetchall(db)
105     print('#' * 50)
106     fetchone(db, 'name')
107     print('#' * 50)
108     delete(db, 'gender')
109     fetchall(db)
110     print('#' * 50)
111     deleteall(db)
112     fetchall(db)
113     
114 if __name__ == '__main__':
115     main()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王亚昌的专栏

Golang 中的“潜规则”

./example_struct2binary.go:21: head.ver undefined (cannot refer to unexported fi...

11020
来自专栏chenssy

【死磕Java并发】—–Java内存模型之重排序

在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改...

26360
来自专栏JAVA技术站

JFinal一行代码搞定增删改,要的就是快 原

首先需要重写getModel方法,但是这有个问题,重写之后的方法和getModel的参数有点冲突,所以选择不重写,另外写个方法占且叫getBaseModel吧,...

7610
来自专栏北京马哥教育

只需9个步骤,完美实现自动化运维异常处理!

1异常 异常就是非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处...

31950
来自专栏Vamei实验室

Python标准库08 多线程与同步 (threading包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Python主要通过标准库中的thread...

27250
来自专栏Pulsar-V

CTF随笔(二)

##PWN001 ssh fd@pwnable.kr -p2222 (pw:guest) 送分题 ? #include <stdio.h> #includ...

30760
来自专栏python3

python列表

"C:Program Files (x86)python3.6python.exe" D:/python3_study/list1.py

12230
来自专栏自动化测试实战

接口测试基础——第7篇 简单的Python知识普及

32630
来自专栏农夫安全

【weakfilescan】敏感文件扫描工具

weakfilescan 基于爬虫,动态收集扫描目标相关信息后进行二次整理形成字典规则,利用动态规则的多线程敏感信息泄露检测工具,支持多种个性化定制选项,包括...

48180
来自专栏C/C++基础

函数调用时堆栈的变化情况

函数的正常运行必然要利用堆栈,至少,函数的返回地址是保存在堆栈上的。函数一般要利用参数,而且内部也会用到局部变量,在对表达式进行求值时,编译器还会生成一些无名临...

8510

扫码关注云+社区

领取腾讯云代金券