我一直在努力创建一个脚本,其中我作为一个用户输入到一个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
代码的工作原理:
它从main开始,在main中有一个保存新线程值的old\u list(这样它就不会再次循环),在old\u names\u list中,我将逐个保存names.txt
在永远运行的while True中,我们打开文件names.txt,然后输入for new_thread in get_names():
,这意味着它将在randomnames.txt的整个列表中循环,其中新的线程将以randomnames.txt的名称命名
之后,我们检查如果不是新名称\u txt==旧名称\u列表:为真。-这段代码的作用是,当我们继续创建将在filter(thread,i)
中继续的线程时,它会查看names.txt中的名字是否在old\u names\u list中,如果不是的话,并查看它是否匹配。这里的要点是,在继续下一个names.txt行之前,一个名称应该通过get_names():
检查所有名称
这是我最大的问题,所以我不认为我需要解释其余的。我这里的问题是,我有50个randomnames.txt名称,这意味着如果我从names.txt中搜索一个名称并通过for new_thread in get_names():
进行检查,这意味着它将创建50个线程来查看是否有匹配的名称。完成first names.txt名称后,它将启动另一个名称。这意味着它将创建新的50个线程,并查看是否有任何匹配项。依此类推,直到names.txt为空
我的问题是,有没有更好的方法来保存set()或list中的所有名称,或者其他最好的方法,然后将其发送到filter(),filter()将为每个正在运行的new_thread
检查all names.txt
我除了什么结果
我想要的结果是,当我第一次运行脚本时。它检查所有names.txt并将它们存储到dict或list中,然后将其发送到filter。一旦它完成了它将击中“没有改变因为没有新的补充。但如果在names.txt中添加新名称。它会使if notnew_names_list == old_names_list:
成为真的,因为列表是不同的。因此,我希望它只检查names.txt上添加的新名称,以检查所有新的\u线程,并查看其是否匹配
如果我理解的很好,你想检查一下
names.txt
中的名字是否在randomnames.txt
中,这个怎么样输出:
编辑:不需要那么多换行符,它们是从初始的
for name in name_*_file
复制进来的相关问题 更多 >
编程相关推荐