【问题标题】:How to save Python in-memory dictionary to a file as a Python source code?如何将 Python 内存字典作为 Python 源代码保存到文件中?
【发布时间】:2012-07-20 14:42:38
【问题描述】:

如何获取内存中 Python 字典的 Python 源代码 表示形式?

在阅读了 Thomas Kluyver 的 comment 在 Rob Galanakis 的博客文章中标题为 Why bother with python and config files? 在他的评论中,我决定提出这个问题,Thomas 声明

但如果您想通过任何方式更改应用程序内部的设置 (如首选项对话框),没有自动的好方法 编写正确的 Python 文件。

【问题讨论】:

  • 您的意思是创建一个.py 文件,其中包含a_dict = {'key1' : 'value1'} 文本,或者更低级别的内容?
  • 我认为 Kluyver 只是意味着 Python 没有内置的东西可以做到这一点,并不是说它不能做到(也不是很难)。
  • @martineau Ignacio 的回答怎么样?
  • @Piotr Dobrogost:我想我错了, 至少对于基本类型是内置的——在这种情况下,我不确定 Kluyver 的意思。

标签: python serialization configuration dictionary code-generation


【解决方案1】:

假设它仅使用“基本”Python 类型,您可以写出结构的repr(),然后使用ast.literal_eval() 将其读回。

【讨论】:

  • 不能保证 repr 会产生正确的 Python 源代码,对吧?
  • 没有。如果只有基本类型 - 字符串、字典、列表、整数等 - 但不会,例如,如果您定义自己的类并尝试保存它的实例。
  • 如果内容仅由基本类型组成。
  • 您能否指出文档中指出repr() 保证为基本Python 类型生成正确的Python 源代码的地方?我不知道为什么repr() 表中的docs.python.org/library/functions.html 链接链接到8.19。 repr — 替代 repr() 实现,而不是内置 repr()... 的文档
  • It's buried: "理想情况下,这个函数应该返回一个字符串,当传递给eval()时,给定一个合适的环境,返回一个具有相同值的对象。"
【解决方案2】:

正如文章所说,你最好使用 JSON/YAML 或其他格式,但如果你真的想使用 Python 字典并且只使用基本的 Python 类型...

写出来(尝试使用 pformat 使其更易于阅读):

from pprint import pformat # instead of using repr()

d = dict(enumerate('abcdefghijklmnopqrstuvwxyz'))
open('somefile.py').write(pformat(d))

回读

from ast import literal_eval
d = literal_eval(open('somefile.py').read())

【讨论】:

  • 正如文章所说,你最好使用 JSON/YAML 或其他格式 并非如此,文章说的正好相反:)
猜你喜欢
  • 2011-06-21
  • 2016-03-29
  • 1970-01-01
  • 2022-12-15
  • 2021-07-04
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 2020-02-19
相关资源
最近更新 更多