【问题标题】:How do I store dictionaries in a file and read/write that file?如何将字典存储在文件中并读/写该文件?
【发布时间】:2017-08-16 10:45:04
【问题描述】:

我正在使用 tkinter 来管理笔记检索程序的 GUI。我可以通过键入关键字并在文本字段中按 Enter 来提取我的笔记,但我想将我的字典移动到一个文件中,这样我的代码空间就不会被大量字典填满。

我一直在环顾四周,但我不确定我将如何去做。 我的目录中有文件。我知道我可以使用open(“filename”, “mode”) 打开所述文件进行阅读,但是我如何调用注释的每个部分。

例如,我现在所做的只是从我的字典中调用一个关键字,然后让它将该关键字的定义写入我的 GUI 中的一个文本框中。我可以从文件中做同样的事情吗?

我将如何从文件中读取关键字并将定义返回到变量或直接返回到文本框?现在我只需要弄清楚如何读取数据。我想一旦我知道我可以弄清楚如何写新笔记或编辑现有笔记。

这就是我现在的设置。

调用我的函数

root.bind('<Return>', kw_entry)

如何将我的定义返回到我的文本框

def kw_entry(event=None):
    e1Current = keywordEntry.get().lower()
    if e1Current in notes:
        root.text.delete(1.0, END)
        root.text.insert(tkinter.END, notes[e1Current])
        root.text.see(tkinter.END)
    else:
        root.text.delete(1.0, END)
        root.text.insert(tkinter.END, "Not a Keyword")
    root.text.see(tkinter.END)

【问题讨论】:

  • 你研究过泡菜吗?
  • @timgeb 我对一般的编程很陌生,对 python 也很陌生。我对 python 和 tkinter 之外的知识知之甚少。我会检查泡菜,看看它是否是我要找的。感谢您的信息。
  • 参见Saving an Object (Data persistence) 以获取使用pickle 模块的示例。它将适用于值可提取的字典。
  • 如果您只存储诸如字典、列表、数字和字符串之类的东西,JSON 非常棒。它还具有可以被许多其他语言阅读的优势......你可以自己阅读它。 Pickle 存储更多数据类型,但特定于 python。还有许多其他选择,包括msgpack,它类似于 json,但在磁盘上更紧凑。这对于微不足道的几兆数据来说不是问题。
  • indent=" " 添加到json.dump 调用中。

标签: python file dictionary tkinter


【解决方案1】:

听起来你需要在初始化时将字典加载到内存中,然后像普通字典一样使用它。

我假设您的字典是标准的 Python 字符串字典,所以我建议使用 Python json lib。

执行此操作的最简单方法是将字典作为 json 一次导出到文件中,使用以下内容:

with open(filename, 'w') as fp:
    json.dump(dictionary, fp)

然后更改您的代码以在初始化时使用以下命令加载字典:

with open(filename) as fp:
    dictionary = json.load(fp)

或者,如果您的数据比文本更复杂,您可以使用 python shelve,它是一个持久的、类似字典的对象,您可以将任何pickle-able 对象传递给该对象。请注意,搁置有其缺点,请阅读随附的文档。

【讨论】:

  • 通过像这样将字典加载到内存中,我还可以编辑字典并在程序关闭时将其放回文件中吗?
  • @BaconTech 如果你最后保存它是的。或者,你可以使用 python shelve,但它也有它的缺点
  • 感谢您的信息。我不知道 python shelve 是什么,但 JSON 看起来很有希望。我将对 json 选项进行一些研究并暂时使用它:D
  • @BaconTech 我在上面添加了json的示例和搁置的简要总结。
  • json 选项看起来像我在您的示例中所需要的。我现在要对其进行测试,看看它是如何工作的,然后我应该一切就绪。再次感谢您的信息。
【解决方案2】:

sqlitedict 是一个在后台使用 sqlite 提供持久字典的项目。您可以像普通字典一样使用它,例如通过为其分配任意(可腌制)对象。

如果您从字典中访问一个元素,则只有您请求的值会从磁盘加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多