Python在循环中匹配字符串

时间:2018-01-07 10:32:20

标签: python

apdb = {'AP Database': [{'AP Type': '110H',
                  'Name': 'varagu',
                  'Public IP': '100.20.300.400',
                  'Wired MAC Address': 'aa:bb:cc:dd:ee:11'},
                 {'AP Type': '110H',
                  'Name': 'thinai',
                  'Public IP': '100.20.300.500',
                  'Wired MAC Address': 'aa:bb:cc:dd:ee:22'},
                 {'AP Type': '110H',
                  'Name': 'Ragi',
                  'Public IP': '100.20.300.600',
                  'Wired MAC Address': 'aa:bb:cc:dd:ee:33'}]}


ap_database = apdb.get('AP Database')

apall = ap_database[0], ap_database[1], ap_database[2]

for ap in apall:

    public = ap.__getitem__('Public IP')
    name = ap.__getitem__('Name')
    ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700']
    for ip in ip_list:
        if ip == public:
            print public  + ' ' + name + ' ' + "Success"

我坚持这个。我需要将'ip'映射为'public'。

预期结果:

结果1 :(这需要存储在变量中,因为我需要在邮件正文中发送)

100.20.300.400 Varagu成功

100.20.300.500 Thinai成功

结果2 :(这需要存储在变量中,也可以单独发送)

100.20.300.600 Ragi失败

3 个答案:

答案 0 :(得分:0)

有很多方法可以实现您的目标。

在解析apdb时,您可以检查“公共IP”是否在ip_list中,然后附加failed_ipsucceed_ip列表。

然后,您只需要处理这两个列表:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

apdb = {'AP Database': [{'AP Type': '110H',
                  'Name': 'varagu',
                  'Public IP': '100.20.300.400',
                  'Wired MAC Address': 'aa:bb:cc:dd:ee:11'},
                 {'AP Type': '110H',
                  'Name': 'thinai',
                  'Public IP': '100.20.300.500',
                  'Wired MAC Address': 'aa:bb:cc:dd:ee:22'},
                 {'AP Type': '110H',
                  'Name': 'Ragi',
                  'Public IP': '100.20.300.600',
                  'Wired MAC Address': 'aa:bb:cc:dd:ee:33'}]}


ap_database = apdb.get('AP Database')

apall = ap_database[0], ap_database[1], ap_database[2]
ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700']
succeed_ip = []
failed_ip = []
for ap in apall:
    success = None
    failed = None
    public = ap.__getitem__('Public IP')
    name = ap.__getitem__('Name')
    if public in ip_list:
        succeed_ip.append((public, name))
        continue
    failed_ip.append((public, name))

print succeed_ip
print failed_ip

table = PrettyTable(['IP', 'Name', 'Result'])
table.add_row(succeed_ip[0])
table.add_row(succeed_ip[1])
print(table)

ftable = PrettyTable(['IP', 'Name', 'Result'])
ftable.add_row(failed_ip[0])
print(ftable)

结果:

[('100.20.300.400', 'varagu', 'success'), ('100.20.300.500', 'thinai', 'success')]
[('100.20.300.600', 'Ragi', 'Failed')]
+----------------+--------+---------+
|       IP       |  Name  |  Result |
+----------------+--------+---------+
| 100.20.300.400 | varagu | success |
| 100.20.300.500 | thinai | success |
+----------------+--------+---------+
+----------------+------+--------+
|       IP       | Name | Result |
+----------------+------+--------+
| 100.20.300.600 | Ragi | Failed |
+----------------+------+--------+

答案 1 :(得分:0)

我稍稍调整了你的代码: 1)apall = ap_database[0], ap_database[1], ap_database[2]此分配不是必需的,因为ap_database = apdb.get('AP Database')这将使ap_database成为列表

2)ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700']这应该不在循环中,不需要为每个循环周期重新分配

3)而不是下面的2行,您可以直接在ip_list中搜索公共IP,如:if public in ip_list:

for ip in ip_list:
        if ip == public:

4)而不是使用 getitem ,只使用get方法对我来说更具可读性(仅限我,如果您愿意,可以使用 getitem

apdb = {'AP Database': [{'AP Type': '110H',
                  'Name': 'varagu',
                  'Public IP': '100.20.300.400',
                  'Wired MAC Address': 'aa:bb:cc:dd:ee:11'},
                 {'AP Type': '110H',
                  'Name': 'thinai',
                  'Public IP': '100.20.300.500',
                  'Wired MAC Address': 'aa:bb:cc:dd:ee:22'},
                 {'AP Type': '110H',
                  'Name': 'Ragi',
                  'Public IP': '100.20.300.600',
                  'Wired MAC Address': 'aa:bb:cc:dd:ee:33'}]}

ap_database = apdb.get('AP Database')
ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700']
results = {'success': [], 'fail': []}

for ap in ap_database:
    public = ap.get('Public IP')
    name = ap.get('Name')
    if public in ip_list:
        results['success'].append(public)
    else:
        results['fail'].append(public)

print(results['success'], reuslts['fail'])

答案 2 :(得分:0)

请参阅下面的一些内联评论

    > groupings <- apply(distanceMatrix, 1, which.min)
    > [1] 1 1 1 1 3 2 3 2 1 1