将YAML文件中的数据加载到Python变量中

4

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

a: 45
b: cheese
c: 7.8

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


参见:https://dev59.com/lVgR5IYBdhLWcg3wLq5n - dreftymac
3个回答

5

通常情况下,使用字典是没有问题的,就像使用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
@user_h 首先,yaml包不随Python一起发布。 - personal_cloud
虽然这是一个旧的主题,但不这样做的主要原因是修改全局变量可能会覆盖重要名称。globals().update(yaml.load("str: 42\nsuper: hi hello"))会对您代码中的其他部分造成破坏。允许用户定义字符串和其他内容进入您的环境也是一个主要安全问题。所以最好避免这种情况;) @user_h - a p

3
问题在于您的信息存储方式。请参阅YAML规范。您提供的信息将返回为字符串。尝试使用像解析器这样的解析器验证它返回您想要的内容。
话虽如此,要将其返回为字典,必须将其保存为
 a: 45 
 b: cheese
 c: 7.8

上面是正确的格式,如果您想将其表示为字典。
下面是一些关于Python的代码。请注意,我将信息保存在名为information.yaml的文件中。
 import yaml
 with open('information.yaml') as info:
      info_dict = yaml.load(info)

1
库应该永远不要安装在虚拟环境之外,请注意。 - personal_cloud

0

首先,你需要在冒号后面加一个空格,以使其成为合法的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

1
注意:库永远不应该安装在虚拟环境之外。 - personal_cloud

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接