假设我有一个这样的字符串列表:
strings = ["foo.bar.1", "foo.bar.2", "foo.bar.A.1", "foo.bar.A.2"]
我想创建一个像这样的YAML输出:
foo:
- bar:
- 1
- 2
- A:
- 1
- 2
只是为了好玩,我做了这个解析器。
这个想法是转换字符串foo.bar.1
foo.bar.2
foo.bar.A.1
foo.bar.A.2
too.bar.1
too.bar.2
too.bar.A.1
too.bar.A.2
插入表:
<表类> tbody><<tr>foo 栏 1 foo 栏 2 foo 栏 1 foo 栏 2 也栏 1 也栏 2 也栏 1 也栏 2 表类>
另一个解决方案。嗯,它更短。它确实起到了作用。但我不敢评论(反正没人在乎):
strings = [
"foo.bar.1", "foo.bar.2", "foo.bar.A.1", "foo.bar.A.2",
"too.bar.1", "too.bar.2", "too.bar.A.1", "too.bar.A.2" ]
strings = list(reversed(sorted(strings)))
for i,s in enumerate(strings[:-1]):
for c,ch in enumerate(s):
if ch != strings[i+1][c]: break
strings[i] = "." * (len(s[:c].split("."))-1) + s[c:]
for i,s in enumerate(strings):
strings[i] = ":n".join([" "*n+c for n,c in enumerate(s.split(".")) if c])
yaml = "n".join(reversed(strings))
print(yaml)
输出:
foo:
bar:
1
2
A:
1
2
too:
bar:
1
2
A:
1
2
看起来您可能正在寻找'yaml.dump'。裁判:http://pyyaml.org/wiki/PyYAMLDocumentation
以下是参考文档中的示例:
import yaml
document = """
a: 1
b:
c: 3
d: 4
"""
print yaml.dump(yaml.load(document))
give
a: 1
b: {c: 3, d: 4}
充分披露:我有很多使用Ansible的YAML经验,但我以前从未使用过这个特殊的功能。我做了一些研究,发现类似的问题也可以用yaml解决。希望它能工作,这是我想尝试的。