我希望将输出作为下面的YAML:
- item: Food_eat
Food:
itemId: 42536216
category: fruit
moreInfo:
- "organic"
我已使用以下代码以与上述相同的顺序打印,但是输出结果与预期不符。
代码:
import yaml
yaml_result = [{'item': 'Food_eat', 'Food': {'foodNo': 42536216,'type': 'fruit','moreInfo': ['organic']}}]
print(yaml.safe_dump(yaml_result))
print(yaml_test)
输出:
- Food:
moreInfo:
- organic
category: fruit
itemId: 42536216
item: Food_eat
不确定如何获得所需的输出。
ruamel.yaml(免责声明:我是该软件包的作者)内置此功能,因为有必要支持其功能往返(加载,修改,转储)YAML数据而不会引入虚假信息变化。除此之外,它默认为YAML 1.2,而仅PyYAML支持YAML 1.1(已超过10年前)。
import sys
import ruamel.yaml
data = [{'item': 'Food_eat', 'Food': {'foodNo': 42536216,'type': 'fruit','moreInfo': ['organic']}}]
yaml = ruamel.yaml.YAML()
yaml.indent(sequence=4, offset=2)
yaml.dump(data, sys.stdout)
给出:
- item: Food_eat
Food:
foodNo: 42536216
type: fruit
moreInfo:
- organic
[这取决于现代Python保持字典插入顺序的能力。对于较旧的版本(例如Python 2.7),您必须显式地创建一个对象CommentedMap
(从ruamel.yaml.comments
和给它一个元组列表(按正确的顺序),或分配键值对按照您要转储的顺序排列。
您可以在序列的缩进中看到破折号具有偏移量,这是您需要如果不重写其发射器,将无法使用PyYAML。
在PyYAML中,您不想做print(yaml.safe_dump(data))
,因为这都是无效的。记忆和时间,请始终使用yaml.safe_dump(data, sys.stdout)
。