如何用shelve将字典保存到.db文件?代码报错及加载异常求助
字典持久化问题修正方案
核心问题点
- 保存逻辑错误:直接给
s赋值字典会覆盖shelve对象引用,根本没把数据写入文件 - 加载逻辑错误:返回的是shelve对象而非实际字典数据
- 文件名不匹配:保存的是
OperationNamesDictionary.db,加载时写成了TOperationNamesDictionary.db,多了个前缀T
修正后的完整代码
保存字典函数
def save_dict(dictionary_to_be_saved): with shelve.open('OperationNamesDictionary.db', 'c') as s: # 用update把字典的键值对批量写入shelve s.update(dictionary_to_be_saved) # 如果你想把整个字典作为单个条目存储,也可以这么写: # s['full_dict'] = dictionary_to_be_saved
加载字典函数
def load_dict(): try: with shelve.open('OperationNamesDictionary.db', 'r') as s: # 对应update的加载方式:把shelve对象转成普通字典 operation_names = dict(s) # 对应单个条目存储的加载方式:提取指定键的值 # operation_names = s['full_dict'] return operation_names except dbm.error: print("Could not find a saved dictionary, using a pre-coded one.") # 这里可以返回你的预定义字典,比如: # return {"op1": "操作1", "op2": "操作2"} operation_names = load_dict() print(operation_names)
说明
- 保存时:
update()方法会把传入字典的所有键值对写入shelve文件;如果用单个键存储整个字典,适合需要保留原字典结构作为整体的场景 - 加载时:
dict(s)会把shelve对象转换成普通Python字典,这样打印出来的就是实际数据而非对象引用 - 务必保证保存和加载的文件名完全一致,否则会触发找不到文件的异常
内容的提问来源于stack exchange,提问作者Nayasaal
相关产品推荐
相关产品推荐

