我正在制作一个基于击键自动完成的函数。 比如,在google.com上,当我在搜索栏中点击“a”时,它会显示相关的搜索词,如amazon、amazon prime、airbnb。。。 我正在尝试使用Python和基于检测击键的CSV文件来实现这个函数。 CSV文件中有一些单词,如行为、建筑、化学、历史、制造、数学。 我的代码的结构包括
while # infinitely looping in order to keep detecting keystrokes
for word in data
for char in range(numOfKeyStrokes)
问题是,当我点击“c”时,它应该打印出化学信息,而且效果很好。 但当我在已经点击“c”之后点击“h”时,没有反应。 我想再把这张“化学”打印出来。 我想当我点击“h”时,编译器不会进入“for word in data”语句,但我不知道为什么。 为了检测问题所在,存在一些垃圾打印输出。 这是我的密码。有人能帮我解决这个问题吗
import keyboard
import csv
import time
global numOfKeyStrokes #In order to compare each elemtn's letter one by one with keystroke
numOfKeyStrokes = 0
def keyStroke():
temp = keyboard.read_key()
time.sleep(0.1)
global numOfKeyStrokes
numOfKeyStrokes += 1
return temp
def init():
f = open('./DataBase.csv')
data = csv.reader(f)
getKeyStroke = []
matchingFlag = False
while True: # looping in order to keep getting keystrokes
global numOfKeyStrokes
getKeyStroke.append(keyStroke())
print(getKeyStroke)
print("numOfKeyStrokes ", numOfKeyStrokes)
for word in data: # each row is an each cell in a csv file
matchingFlag = False
for char in range(numOfKeyStrokes): # each x is an each letter in an each cell
print("word[9][char]==getKeyStroke[numOfKeyStrokes-1]", word[9] [char].lower(),",",getKeyStroke[numOfKeyStrokes-1])
if word[9][char].lower() == getKeyStroke[numOfKeyStrokes-1]:
print("char matched")
matchingFlag = True
break
else:
matchingFlag = False
break
if matchingFlag == True : print(word[9])
f.close()
init()
代码只工作一次的原因是,在
init
函数开始时打开csv文件一次当您将其传递给
csv.reader
并迭代整个文件时,您将消耗资源。在进行下一次迭代时,文件/读取器为空,因此for word in data
循环将不会运行我已经对您的程序进行了相当重要的重构,因此我不一定知道这是否仍能实现您想要的行为,尤其是在不知道您的csv是如何设置的情况下,但我认为您正在寻找类似以下内容:
总体而言,直接在生成器中生成搜索字符串可能是一种更好的方法,因为在一个位置管理搜索字符串的构建并将处理代码分开更容易
相关问题 更多 >
编程相关推荐