我试图找到一个单词是否在文件中,而不是它是否是部分单词的一部分。例如,如果word = 'tes'
和'测试'在单词列表中,我希望它返回False。我已经找到了你可以通过正则表达式做到的地方,但是因为我还没有涵盖我所学到的那部分,所以我想知道如果没有它我能做到这一点。
这是我到目前为止所做的:
WORDLIST_FILENAME = "words.txt"
def isValidWord(word, hand, wordList):
letters = {}
for i in word:
letters[i] = letters.get(i, 0) + 1
if word.upper() in open(wordList).read():
for i in letters:
if i in hand:
if hand[i] >= letters[i]:
continue
else:
return False
else:
return False
return True
else:
return False
word = 'tes'
hand = {'t': 3, 'a': 1, 's': 1, 'i': 1, 'n': 1, 'g': 1}
print(isValidWord(word, hand, 'words.txt'))
即使' tes'实际上并不在word.txt中。我知道为什么,因为我正在检查该字符串是否在文件期间,但我不知道如何解决这个问题。
答案 0 :(得分:4)
您可能需要查看in
关键字,因为它似乎就是您想要的。
这是一个简单的例子:
>>> word = "some"
>>> sentence = "This is a sentence with some words."
>>> word in sentence
True
由于您不希望它与部分字词匹配,您可以删除所有非字母字符,然后split
字符串:
>>> sentence = ''.join(char for char in sentence if char.isalpha() or char.isspace()).split()
>>> "words" in sentence
True
>>> "word" in sentence
False
老实说,我只会使用正则表达式。
答案 1 :(得分:1)
只是列出另一个解决方案,怎么样
if line.startswith('test ') or line.endswith(' test\n') or ' test ' in line:
# ...
这可以说是笨拙的,但它确实避免使用正则表达式或拆分整行只是为了找到一个单词。在分析整条生产线之前检查生产线的起点和终点可能会缩短几个周期,但我没有做任何计时。
这预先假定线条有规律地间隔(单词之间有一个空格,没有标签等,没有标点符号)。如果您的要求不同,可以通过在空格序列+可选标点符号上拆分来规范化线条。
答案 2 :(得分:-1)
您可以使用string.find方法。它返回找到的字符串的索引,否则返回-1。例如: -
str = "This is a Test method".
a = str.find("test")
if a>=0:
return True
else:
return False