我正在学习python 3.1.3中的数据库文件和dbm模块,并且在使用python 2中anydbm模块中的一些方法时遇到了问题。
keys方法工作得很好,
import dbm
db = dbm.open('dbm', 'c')
db['modest'] = 'mouse'
db['dream'] = 'theater'
for key in db.keys():
print(key)
产量:
b'modest'
b'dream'
但物品和价值观,
for k,v in db.items():
print(k, v)
for val in db.values():
print(val)
调出attributeerror:“\dbm.dbm”对象没有属性“items”。
此外,这:
for key in db:
print(key)
获取typeerror:“\u dbm.dbm”对象不可iterable。
这些方法在python 3的dbm模块中不起作用吗?如果那是真的,还有什么可以替代的吗?
最佳答案
我认为这取决于它选择使用哪个实现。在我的系统中,python 3中的dbm选择使用ndbm,这相当于python 2中的dbm
模块。当我显式地使用该模块时,我看到了相同的限制。
python 2中的任何dbm都选择dumbdbm,虽然速度较慢,但确实支持完整的dictionary接口。
您可能希望查看python 2和3中的shelve
模块,它在这些接口上添加了另一层(允许您存储任何可pickle对象)。