从文件中读取IP地址列表并返回网络

时间:2018-10-26 22:04:09

标签: python-3.x file

我已经尝试使用Google数小时,并且堆栈溢出来读取IP地址列表并返回网络。 ip address命令在Python shell中有效,但似乎在导入的列表上跳闸了。我尝试剥离新行并以多种不同方式读取文件,但是我一直收到返回错误。我确信这与我读取文件的方式有关,但我无法弄清楚。

这是当前代码。我们称之为修订号4186!

import ipaddress
def process(line):
    # Output network with mask bits (192.168.0.0/24)
    try:
        return ipaddress.IPv4Interface(line).network
    except Exception:
        return print("FAIL_OR_EMPTY")
with open('ipaddrlong.txt', 'r') as f:
    for line in f:
        process(line)

,名为的输入文件如下所示。只有数据和换行符(/ n)。

192.168.252.146/24
192.168.252.158/24
192.168.252.203/24
192.168.252.209/24

如果我将返回行更改为简单打印,对我来说看起来不错。

'192.168.252.146/24', '192.168.252.158/24', '192.168.252.203/24', '192.168.252.209/24'

当我从shell尝试命令时,它似乎工作正常:

>>> x="192.168.0.1/24"
>>> ipaddress.IPv4Interface(x).network
IPv4Network('192.168.0.0/24')

但是当我运行脚本时,会返回异常“ FAIL_OR_EMPTY”。

1 个答案:

答案 0 :(得分:1)

据我所知,在IP地址后出现空格问题,您必须先使用类似以下内容的字符串:

import ipaddress
def process(line):
    # Output network with mask bits (192.168.0.0/24)
    try:
        return print(ipaddress.IPv4Interface(line).network)
    except Exception:
        return print("FAIL_OR_EMPTY")
with open('in.txt', 'r') as f:
    for line in f:
        line = "".join(line.split())
        process(line)

我的in.txt看起来像这样

192.168.252.146/24
192.168.252.158/24
192.168.252.203/24
192.168.252.209/24
I'm not an IP adr
192.168.252.209/24

输出

192.168.252.0/24
192.168.252.0/24
192.168.252.0/24
192.168.252.0/24
FAIL_OR_EMPTY
192.168.252.0/24