Pyyaml ​​не может проанализировать файл yaml, содержащий блок с отступом (используя | или>) - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь написать скрипт python для анализа файла yaml, который содержит разметку, содержащуюся в литерале блока.

Простой python скрипт:

import yaml

file = open('single-source.yaml')

documentation = yaml.load(file, Loader=yaml.FullLoader)

print(documentation)

it отлично работает при разборе простого файла Yaml, например

---
product name: Azure big VM
product version: 1.0.0
Operating System: RHEL
disk type: premium ssd
location: uk-south

Однако, когда я пытаюсь сделать это с файлом YAML, используя канал для экранирования блока уценки (как это необходимо для моего сценария использования), такого как :

---
product name: | Azure big VM
product version: 1.0.0
Operating System: RHEL
disk type: premium ssd
location: uk-south

Он начинает выдавать кучу ошибок отслеживания, указывающих на файлы pyyaml ​​в каталоге python, как показано ниже. Он выплевывает около 8 из них для различных файлов в каталоге / yaml.

 File "script.py", line 5, in <module>
    documentation = yaml.load(file, Loader=yaml.FullLoader)   File "C:\Users\Ryan\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\yaml\__init__.py", line 114, in load
    return loader.get_single_data()

Кто-нибудь может дать какой-нибудь совет или обойти?

1 Ответ

3 голосов
/ 09 апреля 2020

Ну, как вы сами сказали, скаляр блока должен быть с отступом . Так что это правильный синтаксис:

---
product name: |
  Azure big VM
product version: 1.0.0
Operating System: RHEL
disk type: premium ssd
location: uk-south

Вы не можете иметь содержимое в заголовке. Возможно, вы захотите использовать |- вместо |, чтобы обрезать завершающий перевод строки.

...