Я работал над созданием сценария, в котором я, как пользователь, вводил бы в имена txt-файлов имена, которые я хочу сравнить, если это в функции (которая генерирует 100 случайных имен), и посмотреть, есть ли совпадающие имена.
Я создал этот код:
import json, time, sys, os, timeit, random, colorama, requests, traceback, multiprocessing, re
from random import choice
import threading
def get_names():
name_test = [line.rstrip('\n') for line in open('randomnames.txt')]
return name_test
def filter(thread, i):
text = thread
positive_keywords = [i]
has_good = False
for ch in ['&', '#', '“', '”', '"', '*', '`', '*', '’', '-']:
if ch in text:
text = text.replace(ch, "")
sentences = [text]
def check_all(sentence, ws):
return all(re.search(r'\b{}\b'.format(w), sentence) for w in ws)
for sentence in sentences:
if any(check_all(sentence, word.split('+')) for word in positive_keywords):
has_good = True
break
if not has_good or i == "":
sys.exit()
print('Matched ' + text)
def main():
old_list = []
old_names_list = []
while True:
new_names_list = [line.rstrip('\n') for line in open('names.txt')]
for new_thread in get_names():
if not new_names_list == old_names_list:
for i in new_names_list:
if not i in old_names_list:
threading.Thread(target=filter, args=(new_thread, i)).start()
if new_thread not in old_list:
old_list.append(new_thread)
elif new_thread not in old_list:
threading.Thread(target=filter, args=(new_thread, new_names_list)).start()
old_list.append(new_thread)
else:
randomtime = random.randint(1, 3)
print('No changes!')
time.sleep(randomtime)
old_names_list = new_names_list
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print('Keyboard - Interrupted' )
sys.exit()
randomnames.txt
Alejandro
Tisha
Eleni
Milton
Jeanice
Billye
Vicki
Shelba
Valorie
Penelope
Mellissa
Ambrose
Retta
Milissa
Charline
Brittny
Ehtel
Hilton
Hobert
Lakendra
Silva
Lawana
Sidney
Janeen
Audrea
Orpha
Peggy
Kay
Marvis
Tia
Randy
Cary
Santana
Roma
Mandi
Tyrone
Felix
Maybelle
Leonia
Micha
Idalia
Aleida
Elfrieda
Velia
Cassondra
Drucilla
Oren
Kristina
Madison
Dia
names.txt
Alejandro
Tisha
Eleni
Dia
Hobert
Как работает код:
Он начинается с основного, где есть old_list , в котором сохраняется значение new_thread(чтобы он не зацикливался снова) и old_names_list , где я собираюсь сохранить names.txt по одному.
В то время как True работает вечно, Мы открываем файлnames.txt и затем мы вводим for new_thread in get_names():
, что означает, что он будет проходить по всему списку randomnames.txt , где new_thread будет именем по имени randomnames.txt .
После этого мы проверяем , если не new_names_txt == old_names_list: равно True.- Этот код выполняет то, что он выглядит, если имя в names.txt находится внутри old_names_list , если нет, мы продолжаем создавать поток, который будет продолжаться в filter(thread,i)
, ипосмотреть, если это соответствует.Дело в том, что одно имя к тому времени должно проверять все имена через get_names():
, прежде чем продолжить следующую строку names.txt.
А вот моя основная проблема, поэтому я не думаю, что мне нужнообъясни остальное.Моя проблема здесь в том, что у меня есть etc 50 randomnames.txt names, что означает, что если я ищу одно имя из names.txt и проверяю for new_thread in get_names():
, это означает, что он создаст 50 потоков, чтобы увидеть, есть ли совпадения.Как только первое имя names.txt выполнено, запускается другое.Это означает, что он создаст новые 50 потоков и посмотрит, есть ли совпадения.и так до тех пор, пока names.txt не станет пустым.
Мой вопрос здесь - есть ли лучший способ для примера сохранить, может быть, все имена в set () или списке или что-то лучшее, а затем отправить его наfilter (), который будет проверять все names.txt для каждого new_thread
, который работает?
Какие результаты я должен исключать?
Результат, который я хочу получить, заключается в том, что при запускескрипт первый раз.Он проверяет все names.txt и сохраняет их в dict или list, а затем отправляет их на фильтрацию.Как только это будет сделано, оно попадет в «Без изменений!так как ничего нового не добавлено.Но если вы добавите новое имя в names.txt.Это сделает, если не new_names_list == old_names_list:
, чтобы быть правдой, так как список не то же самое.Поэтому я хочу, чтобы он проверял только новое имя, добавленное в names.txt, чтобы проверить все new_threads и посмотреть, соответствует ли оно.