удалить дубликаты из списка и проверить, есть ли IP из одного списка в другом списке - PullRequest
0 голосов
/ 10 декабря 2018

Я должен CSV-файлы.Первый выглядит так:

enter image description here

Второй содержит список IP:

139.15.250.196
139.15.5.176

Я хотел бы проверитьесли какой-либо IP-адрес из первого файла находится во втором файле.Это похоже на работу (исправьте или укажите подсказки, если мой код поврежден), но проблема в том, что первый файл содержит много повторяющихся значений, например, 10.0.0.1 может появляться x раз, и я не смог найти способ удалить дубликаты.Не могли бы вы помочь мне или руководство?

import csv

filename = 'ip2.csv'
with open(filename) as f:
    reader = csv.reader(f)
    ip = []
    for row in reader:
        ip.append(row[0])


filename = 'bonk_https.csv'
with open(filename) as f:
    reader = csv.reader(f)
    ip_ext = []
    for row in reader:
        ip_ext.append(row[0])
        for a in ip:
            if a in ip_ext:
                print(a)

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Я предлагаю вам нормализовать все IP-адреса,

with open(...) as f
   # a set comprehension of _normalized_ ips, this strips excess trailing zeros
   my_ips = {'.'.join('%d'%int(n) for n in t) 
                for t in [x.split(',')[0].split('.') for x in f]}

Затем вы проверяете каждый нормализованный IP-адрес из второго файла на соответствие IP-адресам, содержащимся в нормализованном наборе (обратите внимание, чтоВ отличие от других ответов, здесь у вас есть один цикл , и проверка того, является ли элемент членом набора, x in my_xs, является весьма оптимизированной операцией)

with open(...) as f:
    for line in f:
        ip = '.'.join('%d'%int(n) for n in line.split('.'))
        if ip in my_ips:
            ...
        else:
            ...
0 голосов
/ 11 декабря 2018

Вы можете привести любой список в набор с помощью set(list).Набор содержит только один из каждого элемента и может сравниваться с member in set как список.Так что просто приведите свой список ip к набору.

with open(filename) as f:
    ip_ext = []
    for row in reader:
        ip_ext.append(row[0])
        for a in set(ip):
            if a in set(ip_ext): #well, you don't need a set her unless you also have duplicates in ip_ext
                print(a)

Или просто прервите / продолжите, если вы нашли свою запись. Это может помочь вам в этом

...