Python:TypeError:int()参数必须是字符串或数字,而不是“IPv4Network”

2024-09-30 16:42:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从csv读取IP地址,并将它们转换为IP范围,还按每个类别对它们进行排列/分组

下面是我的代码:

def create_range(ip_addresses):
    groups = []
    for _, g in itertools.groupby(enumerate(sorted(ip_addresses)), lambda (i, x): i-int(x)):
       group = map(operator.itemgetter(1), g)
       if len(group) > 1:
           groups.append("{}-{}".format(group[0], str(group[-1])))
       else:
           groups.append(str(group[0]))
    return groups

ips = collections.defaultdict(list)

with open('some.csv') as csv_file:
    file_reader = csv.reader(csv_file)
    next(file_reader)
    for (ip, cat, typ) in file_reader:
        ip = ipaddress.IPv4Network(unicode(ip.strip()))
        cat = cat.strip()
        ips[cat.strip()].append(ip)
    resultIPranges = {org: create_range(ip_range) for cat, ip_range in ips.items()}

我的CSV如下:

csv_file = """ip, cat, typ
              50.102.182.2, myCompany, blue
              52.102.182.4, myCompany, blue
              52.102.182.1, myCompany, blue
              52.102.182.5, myCompany, blue
              52.102.182.3, myCompany, blue
              27.101.178.17, myCompany, blue
              27.101.178.16, hisComp, red
              27.101.178.15, hisComp, red
              23.201.165.7, hisComp, red
              55.200.162.10, hisComp, red
              55.200.162.12, hisComp, red
              55.200.162.13, hisComp, red
              55.200.162.11, hisComp, red
              30.101.102.4, hisComp, red
"""

当前问题/错误:

for _, g in itertools.groupby(enumerate(sorted(ip_addresses)), lambda (i, x): i-int(x)): TypeError: int() argument must be a string or a number, not 'IPv4Network'


Tags: csvinipforaddressesgrouprangeblue
1条回答
网友
1楼 · 发布于 2024-09-30 16:42:33

据我所知,你的x是一个IPv4Network实例,而不是int;所以int(x)不能把它转换成int

可以转换的东西是IPv4Address实例;所以我的目标是你应该改变

 ip = ipaddress.IPv4Network(unicode(ip.strip()))

 ip = ipaddress.IPv4Address(unicode(ip.strip()))

–奥帕尔钦斯基

相关问题 更多 >