首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果与列表python中的项匹配,则从yaml文件中删除它们。

如果与列表python中的项匹配,则从yaml文件中删除它们。
EN

Stack Overflow用户
提问于 2022-03-10 23:32:02
回答 1查看 573关注 0票数 0

这是我的yaml文件

代码语言:javascript
复制
cat host.yaml
list1:
 - host-1
 - host-2
 - host-3
 - host-4
list2:
 - host-5
 - host-6
 - host-7
 - host-8
list3:
 - host-9
 - host-10
 - host-11
 - host-12
list4:
 - host-13
 - host-14
 - host-15
 - host-16

这是我的主人名单

代码语言:javascript
复制
cat host.list
host-1
host-5
host-7
host-11
host-16

我正在尝试编写一个以host.yaml和host.list作为输入的程序/脚本,如果host.list中的主机与主机中的主机匹配,yaml应该编辑yaml并删除这些主机。

在上面的场景中,python write_to_yaml.py host.yaml host.list应该将下面的内容写入yaml文件。

代码语言:javascript
复制
cat host.yaml
list1:
 - host-2
 - host-3
 - host-4
list2:
 - host-6
 - host-8
list3:
 - host-9
 - host-10
 - host-12
list4:
 - host-13
 - host-14
 - host-15

如果这是一个愚蠢的问题,请原谅我,我对Python非常陌生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-10 23:45:41

您可以首先通过以下方式安装pyyaml

代码语言:javascript
复制
pip install pyyaml

然后可以使用库读写yaml文件,如下所示:

代码语言:javascript
复制
import yaml

output = {}
host_set = []

# get list of hosts to exclude
with open(r'host.list') as file:
    hosts = yaml.load(file, Loader=yaml.FullLoader)
    host_set = set(hosts.split(" "))

# read host.yaml
with open(r'host.yaml') as file:
    documents = yaml.full_load(file)

    for l, hosts in documents.items():
        output[l] = list(set(hosts) - host_set) # remove items from the read in list of hosts

# write to file
with open(r'output.yaml', 'w') as file:
    documents = yaml.dump(output, file)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71432004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档