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

 

posted @ 2013-08-17 14:18  Hongten  阅读(3852)  评论(0编辑  收藏  举报
Fork me on GitHub