首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Klepto保存和编辑Python

用Klepto保存和编辑Python
EN

Stack Overflow用户
提问于 2015-03-26 03:46:35
回答 1查看 5K关注 0票数 5

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

项目

所以我遇到的问题与我保存文件的方式有关。我第一次试着把它酸洗,因为它是一本字典,但是我不断地出错,因为我的字典是

(名称、类别)对。

我在这里搜索了一下,发现我可以尝试JSON来做同样的事情。最后也犯了同样的错误。最后我找到了起作用的盗贼舱。我成功地保存了我的字典,并成功地加载了它。直到后来,我才发现我可以向文件中添加新的项目,但是每当我从我的数据中删除一些内容并保存时。下次我装货的时候。我拿走的钥匙还在。

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

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

编辑:好的,我假设这是我目前将其设置为保存和加载的方式。

代码语言:javascript
复制
try:
    alcohols = file_archive('Alcohols.txt')
    alcohols.load()
except IOError:
    alcohols = {}
    print('alcohols doesn\'t exist.')

代码语言:javascript
复制
print('Exiting and saving the data.')
        alcohols.dump('Alcohols.txt') #saves the dictionary data as is

它可以很好地保存字典,同时添加新的条目,但是说我必须编辑和删除一些东西,然后保存和退出。下一次加载时,它将有旧的以及任何新的。奇怪的是,在我所有的编辑中,我似乎都弄坏了什么东西。不会保存新的条目。

Edit2:

代码语言:javascript
复制
                del alcohols[name] #deletes the key out of the dict

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

代码语言:javascript
复制
                alcohols[name] = Alcohol() #instantiates the new class

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

解决编辑:

我的问题在于我把它们从字典中删除的方式。以防有人在后面无意中进入这里。看看迈克·麦克恩斯的回答。必须从存档的字典中删除。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-27 00:09:42

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

因此,当您使用dump时,可以将内存中的项传输到后端.若要从缓存和存档中删除,必须同时从两者中删除。

代码语言:javascript
复制
>>> 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)

我想我可以在一个函数调用中更容易地删除.

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29270772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档