Нахождение уникальных строк в 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 шт):

Автор решения: CrazyElf

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() в код.

→ Ссылка