Одиночная кавычка появляется после дампа YAML - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть проблема, которую я хочу предотвратить, чтобы в моем 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 заключаются в одинарные кавычки.

1 Ответ

3 голосов
/ 26 сентября 2019

endGoal - строка сразу после ее ввода.

Попробуйте преобразовать ее в list из int перед обновлением YAML:

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