Нахождение уникальных строк в txt с python
Время от времени сканирую сеть и сохраняю ip в txt файл в формате:
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
Мне надо сравнивать два последних файла и выбрать из второго только новые ip, которых нет в первом. ip не сортированы и идут в разброс.
Вот как я приблизительно вижу решение, но оно не работает, возвращает все ip из второго файла:
import re
with open("data/ips.txt") as prev_ip, open("data/ips1.txt") as cur_ip:
for line in cur_ip:
str_line = str(line)
if re.search( str_line , str(prev_ip)):
pass
else:
# pass
print(line)
Подскажите, пожалуйста, что не так с этим кодом и есть ли более быстрый или красивый способ это сделать.
Вот еще один неработающий пример
with open("data/ips.txt") as prev_ip, open("data/ips1.txt") as cur_ip:
for line in cur_ip:
str_line = str(line)
if line.strip() in prev_ip.readlines():
pass
else:
# pass
print(line)
Ответы (1 шт):
str_line = str(line) - так вы превращаете строку в список символов этой строки, это явно не то, что вам нужно.
Алгоритм должен быть такой:
- читаете первый файл и сохраняете
ipиз него в множество (можно и в список, но когда список будет большой, искаться вхождение в нём будет долго) - идёте по второму файлу и проверяете есть ли его
ipв этом ранее заполненном множестве
ips = set()
with open("data/ips.txt") as prev_ip:
for line in prev_ip:
line = line.strip()
ips.add(line)
open("data/ips1.txt") as cur_ip:
for line in cur_ip:
line = line.strip()
if line not in ips:
print(line)
Регулярные выражения тут вообще никак не нужны - вы же проверяете строки просто на совпадение.
Если вдруг в строках возможны лишние пробелы в начале или конце строки, то можно делать line.strip() перед добавлением в множество и перед поиском в множестве.
P.S. Добавил strip() в код.