【发布时间】:2020-07-19 19:06:21
【问题描述】:
早上好,
我有一个包含如下数据的配置文件:
[hostset 1]
ip = 192.168.122.136
user = test
password =
pkey = ~/.ssh/id_rsa
[hostset 2]
ip = 192.168.122.138
user = test
password =
pkey = ~/.ssh/id_rsa
如果其他值相同,我希望能够在此配置文件中加入任何给定数量的主机集的 ips,因此摄取和格式化的数据将存储在 dict 中,如下所示:
{
ip: ['192.168.122.136', '192.168.122.138'],
user: 'test',
password: '',
pkey: '~/.ssh/id_rsa',
}
通过做类似的事情:
from configparser import ConfigParser
def unpack(d):
return [value for key, value in d.items()]
def parse(configuration_file):
parser = ConfigParser()
parser.read(configuration_file)
hosts = [unpack(connection) for connection in [section for section in dict(parser).values()]][1:]
return [i for i in hosts]
if __name__ == '__main__':
parse('config.ini')
我可以得到一个包含配置文件元素的列表列表,像这样:
[['192.168.122.136', 'test', '', '~/.ssh/id_rsa'], ['192.168.122.138', 'test', '', '~/.ssh/id_rsa']]
然后我只需要一种比较两个列表的方法,如果除了 ip 之外所有元素都相似,则将它们加入一个列表,如下所示:
[['192.168.122.136','192.168.122.138'], 'test', '', '~/.ssh/id_rsa']
所以我只需要一种聪明的方法来处理没有特定长度的列表并加入所有类似的列表。
【问题讨论】:
-
你试过什么?你在用
configparser吗? -
是的,我目前正在使用 configparser 读取 .ini 文件:
python from configparser import ConfigParser parser = ConfigParser() parser.read('config.ini')如果我们使用 dict() 查看它,它将返回如下内容:python {'DEFAULT': <Section: DEFAULT>, 'hostset 1': <Section: hostset 1>, 'hostset 2': <Section: hostset 2>} -
问题是如何巧妙地遍历所有部分以检查匹配的用户/密钥/密码,然后通过 ip 加入这些部分。
标签: python python-3.x ini