首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python模块折叠IP网络

用Python模块折叠IP网络
EN

Stack Overflow用户
提问于 2019-08-06 19:45:04
回答 1查看 943关注 0票数 2

我在使用ipaddress.collapse_addresses()方法时遇到困难。

代码语言:javascript
复制
# n is a list of 192.168.0.0/24 networks (1,2,3,4....etc)
def sumnet():
    n = nlist()
    for net in n:
        snet = ipaddress.collapse_addresses(net)
        return snet

我只想要回原来的名单:

代码语言:javascript
复制
Collapsed Networks
[IPv4Network('192.168.0.0/24'), IPv4Network('192.168.1.0/24'), 
IPv4Network('192.168.2.0/24'), IPv4Network('192.168.3.0/24'), 
IPv4Network('192.168.4.0/24'), IPv4Network('192.168.5.0/24'), 
IPv4Network('192.168.6.0/24'), IPv4Network('192.168.7.0/24'), 
IPv4Network('192.168.8.0/24')]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-06 20:32:44

假设您的输入是来自is地址的IPv4Networks列表,如下..。

代码语言:javascript
复制
netlist = [ipaddress.IPv4Network('192.168.0.0/24'),
           ipaddress.IPv4Network('192.168.1.0/24'),
           ipaddress.IPv4Network('192.168.2.0/24'),
           ipaddress.IPv4Network('192.168.3.0/24'),
           ipaddress.IPv4Network('192.168.4.0/24'),
           ipaddress.IPv4Network('192.168.5.0/24'),
           ipaddress.IPv4Network('192.168.6.0/24'),
           ipaddress.IPv4Network('192.168.7.0/24'),
           ipaddress.IPv4Network('192.168.8.0/24')]

您想要的输出是

代码语言:javascript
复制
[IPv4Network('192.168.0.0/21'), IPv4Network('192.168.8.0/24')]

这一切都可以用.

代码语言:javascript
复制
import ipaddress


def sumnet(netlist):
    return list(ipaddress.collapse_addresses(netlist))


netlist = [ipaddress.IPv4Network('192.168.0.0/24'),
           ipaddress.IPv4Network('192.168.1.0/24'),
           ipaddress.IPv4Network('192.168.2.0/24'),
           ipaddress.IPv4Network('192.168.3.0/24'),
           ipaddress.IPv4Network('192.168.4.0/24'),
           ipaddress.IPv4Network('192.168.5.0/24'),
           ipaddress.IPv4Network('192.168.6.0/24'),
           ipaddress.IPv4Network('192.168.7.0/24'),
           ipaddress.IPv4Network('192.168.8.0/24')]

print(sumnet(netlist))

collapse_addresses方法实际上接受了一个完整的地址列表,您不必一个一个地给它喂食ip_addresses。它将为崩溃的网络返回一个生成器,但您可以将其转换为一个列表,以便更容易地处理它。

如果这不是你想要达到的目标,请告诉我。

很难准确理解您的代码应该做什么,因为下面的代码段启动了一个for循环,在这个循环中,它捕获第一个ip地址,将其折叠到一个生成器中,然后使用该单个ip地址返回生成器,而无需查看任何其他ip地址。然而,这似乎与您的问题所声称的输出不一致。

代码语言:javascript
复制
for net in n:
    snet = ipaddress.collapse_addresses(net)
    return snet
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57382997

复制
相关文章

相似问题

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