用Klep保存和编辑Python

2024-09-29 21:58:24 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我的问题很具体,我先道歉。我是一个新的程序员,尝试着自己从头开始开发。这是相对成功的,只有最后一个问题,我可以看到。你可以在这里完整地查看我的代码。在

Project

所以我遇到的问题与我保存文件的方式有关。我第一次试着把它从字典里挑出来,但是我一直出错,因为我的字典
(名称,类别)对。在

我在这里搜索了一下,发现我可以尝试JSON来做同样的事情。最后也犯了同样的错误。最后我找到了工作正常的klepot模块。我成功地保存了我的字典并成功地加载了它。直到后来我发现我可以向文件中添加新的项目,但每当我从dict中删除一些内容并保存时。下次我加载它。我拿掉的钥匙还在那儿。在

TLDR:可以添加一些东西到我的dict并保存到txt文件,但是当我从dict中删除并保存时,它不会保存删除的密钥。在

不管怎样,我在保存文件或加载文件的方式上还是两者都有问题?任何帮助都将不胜感激。在

编辑:好吧,我假设它是我当前设置为保存和加载的方式。在

try:
    alcohols = file_archive('Alcohols.txt')
    alcohols.load()
except IOError:
    alcohols = {}
    print('alcohols doesn\'t exist.')

以及

^{pr2}$

它在添加新项时很好地保存了字典,但是说我必须进行编辑并删除某些内容,然后保存并退出。下一次装载时,它会有旧的和新的一样。奇怪的是,我似乎在所有的编辑中都弄坏了一些东西。不保存新条目。在

编辑2:

                del alcohols[name] #deletes the key out of the dict

我就是这样取下钥匙的。最初我使用的是pop方法,但当它不能保存更改时,我尝试了这个方法。值得注意的是,它确实从字典中删除了key,value,但是保存和重新加载并不能反映这种变化。在

                alcohols[name] = Alcohol() #instantiates the new class

这就是我如何创建新的键,值对。在

解决编辑:

我的问题是我从字典里删除它们的方式。以防以后有人来这里。看看@Mike Mckerns的回答。必须从存档的字典中删除。在


Tags: 文件the方法key代码nametxt编辑
1条回答
网友
1楼 · 发布于 2024-09-29 21:58:24

基本上,您是从“内存”缓存中删除,而不是从“文件”缓存中删除。默认情况下,klepto存档为您提供“内存中”缓存,您可以直接通过dict接口使用它,它还提供了一个archive作为后端。在

因此,当您dump时,您将内存中的项转移到后端。 要从缓存和存档中删除,必须同时从两者中删除。在

>>> from klepto.archives import *
>>> arch = file_archive('foo.txt')
>>> arch['a'] = 1
>>> arch['b'] = 2
>>> # look at the "in-memory" copy
>>> arch
file_archive('foo.txt', {'a': 1, 'b': 2}, cached=True)
>>> # look at the "on-disk" copy
>>> arch.archive
file_archive('foo.txt', {}, cached=False)
>>> # dump from memory to the file
>>> arch.dump()
>>> arch.archive
file_archive('foo.txt', {'a': 1, 'b': 2}, cached=False)
>>> arch 
file_archive('foo.txt', {'a': 1, 'b': 2}, cached=True)
>>> # delete from the in-memory cache
>>> arch.pop('a')
1
>>> # delete from the on-disk cache
>>> arch.archive.pop('a')
1
>>> arch
file_archive('foo.txt', {'b': 2}, cached=True)
>>> arch.archive
file_archive('foo.txt', {'b': 2}, cached=False)

我想我可以在一个函数调用中更容易地从两者中删除。。。在

相关问题 更多 >

    热门问题