2

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

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

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

现在,当我们为同一个变量编写相同的代码但使用不同的值时,我们会替换以前的值而不是附加值。我该如何改变呢?

4

1 回答 1

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()
于 2013-08-30T15:11:31.697 回答