在 Python 中将 2D 数组漂亮地转储到 YAML
Prettily dump 2D array to YAML in Python
假设我有一个这样定义的二维数组:
import sys
from ruamel.yaml import YAML
yaml = YAML()
yaml.version = (1,2)
def main():
data = {
"foo": [
[1,2,3],
[4,5,6]
]
}
yaml.dump(data, sys.stdout)
if __name__ == '__main__':
main()
我想输出一个 "readable" 有效的 YAML 文件,每个 "row" 在单独的行上:
"foo":
- [1,2,3]
- [4,5,6]
甚至
"foo": [
[1,2,3],
[4,5,5]
]
我查看了 ruamel.yaml
,但默认行为是每列单独一行,虽然有效,但不易阅读:
%YAML 1.2
---
foo:
- - 1
- 2
- 3
- - 4
- 5
- 6
当您将属性 .default_flow_style
设置为 None
(而不是默认值 False
)时,
您的叶节点将以流式表示:
import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
yaml.version = (1,2)
yaml.default_flow_style = None
def main():
data = {
"foo": [
[1,2,3],
[4,5,6]
]
}
yaml.dump(data, sys.stdout)
if __name__ == '__main__':
main()
给出:
%YAML 1.2
---
foo:
- [1, 2, 3]
- [4, 5, 6]
但以上内容适用于整个文件。
如果您希望单个列表在 YAML 中表示为流式序列,您
应该使它们成为 CommentedSeq
类型,然后您可以为每个对象 设置属性 。
这也是 ruamel.yaml
"knows" 如何在往返时保留序列样式的方式:
import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
yaml.version = (1,2)
a = ruamel.yaml.comments.CommentedSeq([1,2,3])
a.fa.set_flow_style()
def main():
data = {
"foo": [
a,
[4,5,6]
]
}
yaml.dump(data, sys.stdout)
if __name__ == '__main__':
main()
给予:
%YAML 1.2
---
foo:
- [1, 2, 3]
- - 4
- 5
- 6
假设我有一个这样定义的二维数组:
import sys
from ruamel.yaml import YAML
yaml = YAML()
yaml.version = (1,2)
def main():
data = {
"foo": [
[1,2,3],
[4,5,6]
]
}
yaml.dump(data, sys.stdout)
if __name__ == '__main__':
main()
我想输出一个 "readable" 有效的 YAML 文件,每个 "row" 在单独的行上:
"foo":
- [1,2,3]
- [4,5,6]
甚至
"foo": [
[1,2,3],
[4,5,5]
]
我查看了 ruamel.yaml
,但默认行为是每列单独一行,虽然有效,但不易阅读:
%YAML 1.2
---
foo:
- - 1
- 2
- 3
- - 4
- 5
- 6
当您将属性 .default_flow_style
设置为 None
(而不是默认值 False
)时,
您的叶节点将以流式表示:
import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
yaml.version = (1,2)
yaml.default_flow_style = None
def main():
data = {
"foo": [
[1,2,3],
[4,5,6]
]
}
yaml.dump(data, sys.stdout)
if __name__ == '__main__':
main()
给出:
%YAML 1.2
---
foo:
- [1, 2, 3]
- [4, 5, 6]
但以上内容适用于整个文件。
如果您希望单个列表在 YAML 中表示为流式序列,您
应该使它们成为 CommentedSeq
类型,然后您可以为每个对象 设置属性 。
这也是 ruamel.yaml
"knows" 如何在往返时保留序列样式的方式:
import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
yaml.version = (1,2)
a = ruamel.yaml.comments.CommentedSeq([1,2,3])
a.fa.set_flow_style()
def main():
data = {
"foo": [
a,
[4,5,6]
]
}
yaml.dump(data, sys.stdout)
if __name__ == '__main__':
main()
给予:
%YAML 1.2
---
foo:
- [1, 2, 3]
- - 4
- 5
- 6