如何从文本文件中列出的数据创建 YAML 文件?

How to create YAML file from data listed in a text file?

我有一个文件 hostname.txt 包含以下内容:

1.1.1.1
2.2.2.2
3.3.3.3

希望在 hostname.yaml 文件中采用以下格式,最好使用 python(bash shell 也可以)。

host1:
  hostname: 1.1.1.1
  platform: linux

host2:
  hostname: 2.2.2.2
  platform: linux

host3:
  hostname: 3.3.3.3
  platform: linux

我想所有的平台都是 'linux',因为你没有提供额外的细节。因此,您可以通过遍历 hosts 非常直接地获得最终结果:

hosts = ('1.1.1.1', '2.2.2.2', '3.3.3.3')

pattern = "host%s:\n  hostname: %s\n  plateform: linux\n"

yaml = "\n".join(pattern % (n+1, host) for (n, host) in enumerate(hosts))

print(yaml)

结果:

host1:
  hostname: 1.1.1.1
  plateform: linux

host2:
  hostname: 2.2.2.2
  plateform: linux

host3:
  hostname: 3.3.3.3
  plateform: linux

由于YAML文件是文本文件,原则上可以按照标准写 Python 输出例程。但是,您需要了解所有详细信息 YAML specification 以便使其成为有效的 YAML 文件。

这对于您的示例来说相对简单,但这只是因为您这样做了 没有打任何 YAML 特价商品,例如需要引用。

缺乏 YAML 规范的详细知识,最好 坚持使用 YAML loader/dumper 库。一库支持 YAML 1.2 标准是 ruamel.yaml(免责声明:我是 那个包裹)。

安装后(在 Python 虚拟环境中使用 pip install ruamel.yaml),您可以:

from pathlib import Path
import ruamel.yaml

in_file = Path('hostname.txt')
out_file = in_file.with_suffix('.yaml')

yaml = ruamel.yaml.YAML()
data = {}
index = 0
for line in in_file.open():
    line = line.strip()
    index += 1
    data[f'host{index}'] = dict(hostname=line, platform='linux')

yaml.dump(data, out_file)

给出:

host1:
  hostname: 1.1.1.1
  platform: linux
host2:
  hostname: 2.2.2.2
  platform: linux
host3:
  hostname: 3.3.3.3
  platform: linux

请注意,第三个条目的主机名(IP 地址?)与您的示例不同, 因为我不知道你希望你的程序如何重复第二个值而不使用 输入文件中的第三个值。