Поэтому я пытаюсь создать сценарий, в котором я перебираю текстовый файл, в котором я хочу сохранить все значения из txt-файла и затем отправить его в функцию.Я объясню это после кода ниже:
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
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 и проверяет, совпадает ли какое-либо из этих имен с именами вnames.txt.Если есть совпадение, оно распечатывает совпадение, если нет, то оно просто делает sys.exit (который убивает поток).
Однако моя проблема заключается в части
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)
Там, где я считаю, проблема в том, что он запускает много потоков, потому что он берет одно имя из names.txt и проверяет все имена одно за другим (поток) имен в randomnames.txt.Это означает, что если в файле randomnames.txt имеется 50 имен, то будет создано 50 потоков, где он проверяет, совпадает ли какое-либо из имен из randomnames.txt с именем из names.txt.Если он совпадает, то он распечатает, что есть совпадение.Проблема в том, что нужно создать 50 потоков только с одним именем, и это означает, что для добавления нового имени будет добавлено еще 50 потоков.
Причина, по которой я считаю, что это проблема, и как ее можно решить, заключается в том, что если возможнодобавив все имена из names.txt в список, а затем отправьте его в filter (), где он проверяет, совпадает ли любое из имен в names.txt с именами из randomnames.txt