转换点分隔字符串列表到YAML的快速方法?



假设我有一个这样的字符串列表:

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栏1foo栏2foo栏1foo栏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解决。希望它能工作,这是我想尝试的。

相关内容

  • 没有找到相关文章

最新更新