Форум сайта python.su
0
Здраствуйте,помогите сделать скрипт.Цель-привести список IP адресов вида
192.168.1.1
192.168.1.100
195.168.5.50
195.168.5.200
К виду
192.168.1.0/24
195.168.5.0/24
То есть к их маске.Алгоритм получается-получаем текст из файла —> заменяем последние символы до . на 0 —>удаляем дубли —->ставим маску,чаще всего это /24.
Как это все сделать?Мне мозгов хватило только на
import string import re ip=open("ip.txt") data=ip.read()
Офлайн
568
А что тут выдумывать? split - разбить строку на подстроки, сделать с подстроками что угодно, join - собрать строку назад.
Офлайн
1
Бейте ваши строки на подстроки (split(“.”)), затем циклом проверяйте наличие и количество нулей в конце, каждой подстроки, затем просто уберите их например через извлечение среза. Затем через join объединяйте обратно ваши подстроки в строки ip-адреса. Затем создайте set (множество) в которое вносите ваши эти адреса, сочетая эту обработку с дополнением в эти строки маски. Set - множество без повторений, которое не даст вам повторить один и тот же ip-адрес. Сам код думайте сами, ибо это примитив.
P.S. У кого найдется решение лучше - пишите.
Офлайн
2
tipok
s = '''192.168.1.1 192.168.1.100 195.168.5.50 195.168.5.200 ''' f = s.splitlines() new_f = list(set(['{}.0/24'.format(x.rsplit('.', 1)[0]) for x in f])) print(new_f)
как вам мой костыль, господа?
Офлайн
33
tipok
текст из файла —> заменяем последние символы до . на 0 —>удаляем дубли —->ставим маску,чаще всего это /24.
ip_networks = set() for line in open('ip_addresses.txt'): ip_networks.add(line.strip().rsplit('.', 1)[0]+'.0/24')
Офлайн
6
а от куда берётся информация о маске сети, если там не 24, а 16 маска к примеру.
Офлайн