将 yaml 解析为 Python 中的列表

joh*_*fk3 7 python yaml list pyyaml

我需要在项目中使用 YAML。我有一个 YAML 文件,我用它来填充与数据交互的 Python 程序中的列表。

我的数据如下所示:

Employees:
    custid: 200
    user: Ash
        - Smith
        - Cox
Run Code Online (Sandbox Code Playgroud)

我需要 python 代码来迭代这个 YAML 文件并填充这样的列表:

list_of_Employees = ['Ash', 'Smith' 'Cox']
Run Code Online (Sandbox Code Playgroud)

我知道我必须打开文件,然后将数据存储在一个变量中,但我无法弄清楚如何在列表中分别输入每个元素。理想情况下,我想使用 append 函数,这样我就不必每次都确定我的“用户”大小。

Ant*_*hon 8

YAML 序列会为您转换为 python 列表(至少在使用 PyYAMLruamel.yaml时),因此您不必自己添加任何内容。

在 PyYAML 和 ruamel.yaml 中,您要么将文件/流传递给例程load(),要么将字符串传递给它。两个都:

import ruamel.yaml

with open('input.yaml') as fp:
    data = ruamel.yaml.load(fp)
Run Code Online (Sandbox Code Playgroud)

import ruamel.yaml

with open('input.yaml') as fp:
    str_data = fp.read()
data = ruamel.yaml.load(str_data)
Run Code Online (Sandbox Code Playgroud)

做同样的事。

假设您将输入更正为:

Employees:
    custid: 200
    user:
    - Ash
    - Smith
    - Cox
Run Code Online (Sandbox Code Playgroud)

您可以打印出数据:

{'Employees': {'custid': 200, 'user': ['Ash', 'Smith', 'Cox']}}
Run Code Online (Sandbox Code Playgroud)

并看到列表已经存在并且可以通过正常的字典查找访问:data['Employees']['user']


wor*_*wer 5

with open("employees.yaml", 'r') as stream:
    out = yaml.load(stream)
    print out['Employees']['user']
Run Code Online (Sandbox Code Playgroud)

应该已经为您提供了用户列表。另请注意,您的 yaml 在用户节点之后缺少一个破折号