Python循环匹配IP问题:如何映射IP与AP公网IP并生成两类结果
解决IP与AP公网IP映射及结果分类存储问题
先聊聊原代码里的几个小问题:你把ip_list放在循环里每次都会重复定义,而且apall手动取前三个元素的写法不够灵活(要是后续AP数据库条目变多就会漏掉),最关键的是没有把匹配结果存下来,只是打印出来没法直接用于邮件。
我帮你调整了代码,完美实现你要的两个需求——把匹配成功和失败的结果分别存入变量,方便后续单独发邮件。修改后的代码如下:
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') # 初始化两个空列表,分别存成功、失败的匹配结果 success_results = [] fail_results = [] # 把要匹配的IP列表放在循环外,只定义一次就行 ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700'] # 直接遍历AP数据库的所有条目,不用手动指定索引,兼容后续条目增加 for ap in ap_database: public_ip = ap['Public IP'] # 用方括号取值比__getitem__更直观易读 ap_name = ap['Name'] if public_ip in ip_list: # 匹配成功,生成格式化字符串加入成功列表 success_str = f"{public_ip} {ap_name.title()} Success" success_results.append(success_str) else: # 匹配失败,生成格式化字符串加入失败列表 fail_str = f"{public_ip} {ap_name.title()} Fail" fail_results.append(fail_str) # 把列表转成适合邮件正文的格式,用换行分隔每条结果 success_email_content = "\n".join(success_results) fail_email_content = "\n".join(fail_results) # 可以打印验证结果 print("成功匹配结果:") print(success_email_content) print("\n失败匹配结果:") print(fail_email_content)
关键改动说明:
- 将
ip_list移到循环外部,避免重复定义,提升代码效率 - 直接遍历
ap_database的所有元素,不管后续AP数量增减都能兼容 - 用
ap['Public IP']替代ap.__getitem__('Public IP'),代码可读性更强 - 用
f-string格式化结果字符串,比传统字符串拼接更简洁优雅 - 用两个列表分别收集成功/失败结果,最后转成换行分隔的字符串,直接就能作为邮件正文使用
现在你可以直接用success_email_content和fail_email_content这两个变量来生成对应的邮件内容啦~
内容的提问来源于stack exchange,提问作者selvam samymuthu
相关产品推荐
相关产品推荐

