используй для чтения csv pandas, на случай если они там огромные, то с параметром chunksize=количество строк (по простому чтение по частям) и encoding=то что chardet вернул. Далее поставь колонку с номерами телефона в индекс (для пандас не уникальные индексы это совершенно нормально) и верни csv файл с совпадениями. Код будет что то вроде этого. Предположим это твой csv файл <br/> <pre><code class="markdown">Номер Телефона,Имя,Фамилия
333,Иван,Петров
333,Василий,Сидоров
444,Петр,Прямой
333,Федор,Кривой</code></pre> <br/> <pre><code class="python">phone_numbers = pd.read_csv('test.csv',index_col='Номер Телефона')
numbers_of_interset = [777,333]
index = phone_numbers.index.intersection(numbers_of_interset)
not_found = pd.Index(numbers_of_interset).difference(test.index)
(
phone_numbers.loc[index,:]
.to_csv('result.csv')
)</code></pre> <br/> Читаем в фрейм и устанавливаем номер телефона в индекс, numbers_of_interest это те номера которые ты хочешь вернуть в качестве выборки если они есть в файле, делаем intersection с индексом фрейма, также находим те что не нашлись. Записываем файл только с теми что есть. При необходимости выводим те что не нашлись хранятся в not_found. <br/> <br/> Если они очень большие и требуют чтения по частям обратись к докам pandas ну или вот пример использования <a href="https://www.geeksforgeeks.org/how-to-load-a-massive-file-as-small-chunks-in-pandas/" rel="nofollow">https://www.geeksforgeeks.org/how-to-load-a-massiv...</a> <br/> <br/> Ну и если тебе не нужна вся выборка а только количество совпадений мне это не очевидно из твоего вопроса, то в контексте моего примера <br/> <code class="python">print(phone_numbers.loc[index,:].shape[0])</code> Даст тебе количество.