如何检查变量是否与txt文件中的行相同-python

时间:2020-07-18 03:18:10

标签: python file text line

def check(file_name, string_to_search):
    with open(file_name, 'r') as read_obj:
        for line in read_obj:
            if string_to_search in line:
                return True
    return False

while True:
    word = input('Is the word positive? | ')
    if check('positivewords.txt', word):
        print('Word is positive')
    elif check('negativewords.txt', word):
        print('Word is negative')
    else:
        print('Word not in database')

该代码应该逐行读取txt文件,并确定'word'变量是否完全等于这些行之一。问题在于,只要它运行,变量就不必完全相等。例如,假设其中一行是“免费”,而我搜索“ e”,它仍然会弹出,它位于txt文件中。预先感谢。

2 个答案:

答案 0 :(得分:0)

如它所说,

in检查对象是否在另一个对象中。这包括字符串中的字符。您应该使用==来等于*。

def check(file_name, string_to_search):
    with open(file_name, 'r') as read_obj:
        for line in read_obj:
            if string_to_search.lower() == line.lower():  # <-- Changed in to == and made them lower
                return True
    return False

*。好吧,不完全是。这有点难以解释。如果对象的值相等,则==返回True,但这并不意味着它们具有相同的类型。如果要检查它们是否是相同类型,请使用is

如果有一个比我聪明的人编辑了我的问题以澄清我的观点,我将不胜感激。

答案 1 :(得分:0)

您的代码中的问题是此行:

if string_to_search in line:

,如果字符串出现在line中的任何位置,则为true。它与整个单词不匹配。我想这就是你想要做的?

您可以做的是将每一行分成单词列表。字符串类的split()方法可以做到这一点。如果您的行中包含标点符号,那么您也将其删除,以便与搜索字符串进行比较;为此,您可以使用字符串的strip()方法。全部放在一起,您的check()函数将变为:

import string

def check(file_name, string_to_search):
    with open(file_name, 'r') as read_obj:
        for line in read_obj:
            #List of words (without punctuation)
            words = [word.strip(string.punctuation) for word in line.split()]
            if string_to_search in words:
                return True
    return False