Я полный нуб, и Google сделал мой первый скрипт на Python.
Я открываю 2 файла и удаляю список 1 из списка 2.
После того, как list2 был изменен, чтобы удалить то, что было в списке 1, я хочу отсортировать список по IP-сети. Например:
1.1.1.1/24
1.1.1.1/32
5.5.5.5/20
10.10.11.12/26
10.11.10.4/32
сейчас идет сортировка
1.1.1.1/24
1.1.1.1/32
10.10.11.12/26
10.11.10.4/32
5.5.5.5/20
код:
import os
import sys
import random
import re
text_file = open("D:/file/update2.txt", "rt")
lines = str(text_file.readlines())
text_file.close()
ip_address = r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]
{1,3}/\d{1,2})'
foundip = re.findall( ip_address, lines )
text_file2 = open("D:/file/Block.txt", "rt")
lines2 = str(text_file2.readlines())
text_file2.close()
foundip2 = re.findall( ip_address, lines2 )
test =(list(set(foundip2) - set(foundip)))
items = sorted(test)
print (*items, sep = "\n")
Заранее спасибо.
Решение проблемы
сортировка по умолчанию — буквенно-цифровая сортировка. Вам нужно сгенерировать целочисленные кортежи из ваших IP-адресов, чтобы использовать их в качестве функции ключа сортировки. Я использую re.findallвыражение с цифрами, а затем конвертирую в int (но есть и другие решения, splitнапример, с)
import re
ip_list = """1.1.1.1/24
1.1.1.1/32
10.10.11.12/26
10.11.10.4/32
5.5.5.5/20""".splitlines()
print(sorted(ip_list,key=lambda x: [int(m) for m in re.findall("\d+",x)]))
печатает:
['1.1.1.1/24', '1.1.1.1/32', '5.5.5.5/20', '10.10.11.12/26', '10.11.10.4/32']
Комментариев нет:
Отправить комментарий