【问题标题】:Load data from a YAML file into variables in python [duplicate]将YAML文件中的数据加载到python中的变量中[重复]
【发布时间】:2016-01-05 08:46:03
【问题描述】:

我有一个 YAML 文件,其内容如下:

a: 45
b: cheese
c: 7.8

我希望能够将这些信息读入 python 中的变量,但经过广泛的谷歌搜索后,我无法确定这是否可行,或者我必须先将其放入另一种 python 类型,然后才能放入变量中?最终我想使用 a 和 c 中的值进行计算。

【问题讨论】:

标签: python variables yaml


【解决方案1】:

问题在于您的信息的存储方式。请参阅YAML 规范。您提供的信息将作为字符串返回。 尝试在您的信息上使用类似 parser 的解析器来验证它是否返回您希望它返回的内容。

话虽如此。要将其作为字典返回,必须将其另存为

 a: 45 
 b: cheese
 c: 7.8

以上是保存的正确格式,如果您想将其表示为字典。

下面是一些 Python 代码。请注意,我将信息保存到名为 information.yaml 的文件中

 import yaml
 with open('information.yaml') as info:
      info_dict = yaml.load(info)

【讨论】:

  • 库不应该安装在 virtualenv 之外,注意
【解决方案2】:

首先,您需要在冒号后面留一个空格以使其成为合法的 yaml(wiki:searchcolon)。更多关于pyyaml的信息,请点击here

#pip install pyyaml

In [1]: text="""
   ...: a: 45
   ...: b: cheese
   ...: c: 7.8"""

In [2]: import yaml

In [3]: print yaml.load(text)
{'a': 45, 'c': 7.8, 'b': 'cheese'}

现在你可以走了:)

如果有人对空间的重要性感兴趣:

In [4]: text1="""
a:45
b:cheese
c:7.8"""

In [6]: print yaml.load(text1)
a:45 b:cheese c:7.8

【讨论】:

  • 库不应该安装在 virtualenv 之外,注意。
【解决方案3】:

一般来说,使用字典并没有什么问题,就像使用 yaml.load("""a: 45\nb: cheese\nc: 7.8""") 一样——如果你真的必须将它们作为实际变量放入命名空间,你可以这样做:

>>> y = yaml.load("""a: 45
... b: cheese
... c: 7.8""")
>>> globals().update(y)
>>> b
"cheese"

但我不推荐它。

【讨论】:

  • 你为什么不推荐它
  • @user_h 一方面,yaml 包不随 Python 一起提供。
  • 旧线程,但不这样做的主要原因是修改全局变量会覆盖重要的名称。 globals().update(yaml.load("str: 42\nsuper: hi hello")) 会对你的其余代码做坏事;允许用户定义的字符串和事物进入您的环境也是一个主要的安全问题。所以只是避免它;)@user_h
猜你喜欢
  • 1970-01-01
  • 2020-10-13
  • 2018-05-24
  • 2013-07-02
  • 2013-09-01
  • 2019-08-01
  • 1970-01-01
  • 2017-07-16
  • 2021-12-03
相关资源
最近更新 更多