如何*将文本追加到用shelve打开的数据库文件中?

时间:2013-08-30 14:41:58

标签: python

在我们使用shelve.open创建数据库文件然后关闭程序之后,如果我们再次运行代码但使用不同的输入,它实际上替换文本而不是追加它。

我该如何改变这种行为? 例如:

    db = shelve.open('store')
    db['some variable'] = some value
    db['another variable'] = another value
    db.close()

现在,当我们为相同的变量编写相同的代码但具有不同的值时,我们替换之前的值,而不是将值附加。我怎么能改变它?

1 个答案:

答案 0 :(得分:2)

假设您的值是列表:

  • 使用db = shelve.open('store',writeback=True),然后将值附加到同一个键。

  • 由于您的代码无法使用'store'打开writeback=True 必须为变量分配密钥temp = db['some variable']的值,这将是 some value,然后附加该变量temp.append(another value),然后重新分配该键值db['some variable'] = temp

为了替换值,您的第三行代码不应该是db['some variable'] = another value'吗?

编辑:问题的其他可能含义?

您是说要将数据库加载到对象中并在关闭程序后继续使用“UI”代码进行编辑吗?如果是这样,那么你可以做类似的事情:

class Update_MyStore(MyStore):
    def __init__(self, store):
        db = shelve.open(store)
        for i in db:
            setattr(self, i, db[i])
        self.items()
        self.store_in_db()
Update_MyStore('store')

修改:如果您想要添加或更新特定项目,则需要更新另一个选项:

while True:
    store = shelve.open('store',writeback = True)
    Item = input('Enter an item: ').capitalize() #I prefer str(raw_input('Question '))
    if not Item or Item == 'Break':
        break
    store['item_quantity'][Item] = int(input(('Enter the number of {0} available in the store: ').format(Item)))
    store['item_rate'][Item] = float(input(('Enter the rate of {0}: ').format(Item)))
    store.sync()
    store.close()