【问题标题】:Single quote appears after YAML dumpYAML转储后出现单引号
【发布时间】:2019-09-26 10:11:02
【问题描述】:

我有一个问题,我希望防止单引号出现在我的 YAML 文件中。无论如何我可以在没有单引号的情况下实现目标显示的预期输出?

我在 Python 中运行以下代码来更新文件:(未实现输入的格式检查,因为这是我正在学习的练习)

import sys
import yaml
import ruamel.yaml

def updateInformation():
    agentName = input("What is the name of agent you want to update?")
    endGoal = input("What is the new coordinate you want to update, type in terms of [x, y] where x and y are numbers")
    updateInputFile(agentName, endGoal)

def updateInputFile(agentName, endGoal):
    yaml = ruamel.yaml.YAML()
    i = 0
    with open('input.yaml') as f:
        doc = yaml.load(f)
    print(doc)
    for v in doc:
        if i < len(doc[v]):
            if doc['agents'][i]['name'] != agentName:
                i = i + 1
                pass
            else:
                if doc['agents'][i]['name'] == agentName:
                    doc['agents'][i].update({'goal': endGoal})
                    break

    yaml.representer.ignore_aliases = lambda *data: True
    with open('input.yaml', 'w') as f:
        yaml.dump(doc, f)

目前执行以下代码后的输出文件:

agents:
- start: [0, 0]
  goal: '[3, 1]'
  name: agent0
- start: [2, 0]
  goal: [0, 0]
  name: agent1
map:
  dimensions: [3, 3]
  obstacles:
  - !!python/tuple [0, 1]
  - !!python/tuple [2, 1]

预期输出:

agents:
- start: [0, 0]
  goal: [3, 1]
  name: agent0
- start: [2, 0]
  goal: [0, 0]
  name: agent1
map:
  dimensions: [3, 3]
  obstacles:
  - !!python/tuple [0, 1]
  - !!python/tuple [2, 1]

我认为,当它被转储回 YAML 文件时,endGoal 的值可能会面临一个模棱两可的解释,因为它是一个导致它在 YAML 文件中被单引号引用的字符串。

【问题讨论】:

    标签: python yaml ruamel.yaml


    【解决方案1】:

    endGoal 是输入后的字符串。

    在更新 YAML 之前尝试将其变为 listint

    endGoal = '[1,2]' # for example
    endGoal = [int(a_string) for a_string in endGoal.strip('[]').split(',')]
    

    【讨论】:

    • 在 YAML 文件中更新后,输出似乎不是我打算在 YAML 文件中的输出:goal: - !!set 1: null 3: null 我要求将文件保留为如上所述的预期输出,这是当我加载要在另一个 python 文件上读取的 YAML 文件时。
    • 经过一番尝试,我终于明白你的意思了。感谢你的回答!我设法通过你的方法得到了预期的输出!
    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 2019-01-16
    • 2020-03-19
    • 2021-01-30
    • 2020-02-06
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多