我正在尝试从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'
据我所知,你的
x
是一个IPv4Network
实例,而不是int
;所以int(x)
不能把它转换成int可以转换的东西是
IPv4Address
实例;所以我的目标是你应该改变至
–奥帕尔钦斯基
相关问题 更多 >
编程相关推荐