Чтение и запись файлов YAML через Python3 - PullRequest
0 голосов
/ 06 июня 2019

Я пишу небольшой скрипт на python (python 3.7), который должен читать и писать файлы YAML.В данный момент я нахожусь в точке, где я просто хочу прочитать данный файл YAML.Я импортировал библиотеку YAML и попытался прочитать файл.Проблема, с которой я столкнулся на данный момент, заключается в том, что выходные данные не являются вложенными, как в исходном файле.

Как я могу написать YAML-файл структурированным способом, как показано в разделе ниже.

Мой код:

import yaml

with open("/Users/Ilumeyss/Desktop/05_PS_ITM/xDQ_Datenqualitaetsvereinbarung_1003222_2018-10-16_v22yaml.sec", 'r') as stream:
    try:
        print(yaml.safe_load(stream))
    except yaml.YAMLError as exc:
        print(exc)

Это то, что я хотел бы получить:

projectElements:
компания:
поставщик:
dataSupplierInformation:
имя: "Textilfabrik GmbH & Co. KG"

адрес: {strasse: "Industriestr 1", plz: "72555", ort: "Метцинген", земля: "Германия"}

xdqNr: 1001001
dataUserInformation:
имя: "Handel24 Deutschland AG"
адрес: {strasse: "Handelsweg 42", plz: "74078", ort: "Heilbronn",земля: "Германия"}
xdqNr: 1001002
информация о документе:
имя документа: "Datenqualitaetsvereinbarung"
xdqNr: 1003222

Это то, что я получаю до сих пор:

{'projectElements': {'company': {'supplier': {'dataSupplierInformation': {'name': 'Textilfabrik GmbH & Co. KG', 'address':

... и так далее

1 Ответ

0 голосов
/ 06 июня 2019

Чтобы распечатать документ YAML, как вы его загрузили, вы должны выгрузить загруженные данные в стандартный вывод.Я рекомендую использовать ruamel.yaml, так как он поддерживает этот тип циклического отключения намного лучше, чем PyYAML (отказ от ответственности: я являюсь автором ruamel.yaml).PyYAML поддерживает только YAML 1.1, и это было устаревшим в 2009 году.

Если ваш ввод в xDQ_Datenqualitaetsvereinbarung_1003222_2018-10-16_v22yaml.sec:

projectElements: 
  company:
    supplier:
      dataSupplierInformation:
        name: "Textilfabrik GmbH & Co. KG"

        address: {strasse: "Industriestr 1", plz: "72555", ort: "Metzingen", land: "Germany"}

        xdqNr: 1001001
      dataUserInformation:
        name: "Handel24 Deutschland AG"
        address: {strasse: "Handelsweg 42", plz: "74078", ort: "Heilbronn", land: "Germany"}
        xdqNr: 1001002
      documentinformation:
        dokumentname: "Datenqualitaetsvereinbarung"
        xdqNr: 1003222

И ваша программа:

import sys
from pathlib import Path
import ruamel.yaml

infile = Path('xDQ_Datenqualitaetsvereinbarung_1003222_2018-10-16_v22yaml.sec')

yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True
data = yaml.load(infile)
yaml.dump(data, sys.stdout)

ваш вывод будет:

projectElements:
  company:
    supplier:
      dataSupplierInformation:
        name: "Textilfabrik GmbH & Co. KG"

        address: {strasse: "Industriestr 1", plz: "72555", ort: "Metzingen", land: "Germany"}

        xdqNr: 1001001
      dataUserInformation:
        name: "Handel24 Deutschland AG"
        address: {strasse: "Handelsweg 42", plz: "74078", ort: "Heilbronn", land: "Germany"}
        xdqNr: 1001002
      documentinformation:
        dokumentname: "Datenqualitaetsvereinbarung"
        xdqNr: 1003222

, и вы не сможете получить точно такой же вывод с помощью PyYAML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...