如何从文本文件中列出的数据创建 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 地址?)与您的示例不同,
因为我不知道你希望你的程序如何重复第二个值而不使用
输入文件中的第三个值。
我有一个文件 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 地址?)与您的示例不同, 因为我不知道你希望你的程序如何重复第二个值而不使用 输入文件中的第三个值。