Нужна помощь в очистке списка IP от постороннего мусора, далее эти IP будут использоваться для подключения по ssh.
Проверка на валидность не нужна, будем считать, что сами адреса правильные.
Данную задачу я можно сказать почти решил, но решение, конечно же страшное и смешное).
Итак, возьмем для примера такой списочек в файле (не спрашивайте меня, откуда взялся этот мусор)) ):
$10.138.$100.65 y i $ 10.138 .120.ч 129 fd FCK10ж.138{.105.1ww o 10d.138eee#.105.225 x z192.168.233 .188r A ) 30.12 f.15D.115#
Как делал очистку:
import os import subprocess import re import netmiko os.system('clear') with open ("addresses.txt", 'r') as addresslist: hosts = addresslist.read() def LeaveOnlyNumbersAndDots(x): return (re.findall(r'[0-9\.]+', x)) # Удалить спецсимволы, кроме ' (не нашел как символ ' можно заэкранировать). Точку . не трогаем. # При использовании re.sub, все сливается в одну строку и не понятно, как потом разделять aaa = (hosts.replace\ ('`', 'NULL').replace('~', 'NULL').replace('!', 'NULL').\ replace('@', 'NULL').replace('#', 'NULL').replace('$', 'NULL').replace('%', 'NULL').\ replace('^', 'NULL').replace('&', 'NULL').replace('*', 'NULL').replace('(', 'NULL').\ replace(')', 'NULL').replace('-', 'NULL').replace('+', 'NULL').replace('^_', 'NULL').\ replace('=', 'NULL').replace('[', 'NULL').replace(']', 'NULL').replace('\\', 'NULL').\ replace('{', 'NULL').replace('}', 'NULL').replace('|', 'NULL').replace(';', 'NULL').\ replace(':', 'NULL').replace('"', 'NULL').replace(',', 'NULL').replace('/', 'NULL').\ replace('<', 'NULL').replace('>', 'NULL').replace('?', 'NULL')) # Удалить все буквы bbb = ''.join(i for i in aaa if not i.isalpha()) # Удалить все пробелы ccc = bbb.replace(' ', '') # Пройдемся ранее заготовленной функцией с паттерном r'[0-9\.]+' на случай если что-то не удалилось и для подготовки адресов для ssh ipaddresses = (LeaveOnlyNumbersAndDots(ccc)) print(ipaddresses) # Костыли сработали # Результат: ['10.138.100.65', '10.138.100.129', '10.138.105.1', '10.138.105.225', '192.168.0.188', '30.12.15.15']
Как можно решить эту задачу правильно?