我正在编写一个小的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:“ Metzingen”,土地: “德国”}
xdqNr: 1001001
dataUserInformation:
名称: “ Handel24 Deutschland AG”
地址: {strasse:“ Handelsweg 42”,plz:“ 74078”,ort:“ Heilbronn”,土地: “德国”}
xdqNr: 1001002
文件信息:
文件名: “ Datenqualitaetsvereinbarung”
xdqNr: 1003222
{'projectElements':{'company':{'供应商': {'dataSupplierInformation':{'name':'Textilfabrik GmbH&Co. KG', “地址”:
...等等
答案 0 :(得分:0)
要在加载YAML文档时打印它,应该转储
加载的数据到stdout。我建议使用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获得完全相同的输出。