如何读取文件并将每行转换为字符串并查看是否有任何字符串在用户输入中?

时间:2017-06-29 05:35:18

标签: python string file

我在程序中尝试做的是让程序打开一个包含许多不同单词的文件。

接收用户输入并检查文件中的任何单词是否在用户输入中。

文件 redflags.txt

happy
angry 
ball 
jump

不同行上的每个单词。

例如,如果用户输入为"Hey I am a ball",则会打印红色标记。 如果用户输入为"Hey this is a sphere",则它将打印noflag。

Redflags = open("redflags.txt")

data = Redflags.read()
text_post = raw_input("Enter text you wish to analyse")
words = text_post.split() and text_post.lower()

if data in words:
  print("redflag")
else:
 print("noflag")      

3 个答案:

答案 0 :(得分:1)

这应该可以做到!集合通常比列表比较的查找快得多。集合可以告诉你这种情况下的交集(重叠的单词),差异等。我们使用包含单词列表的文件,删除换行符,小写,我们有第一个列表。第二个列表是根据用户输入创建的,并按间距分割。现在我们可以执行我们的集合交集以查看是否存在任何常用单词。

# read in the words and create list of words with each word on newline
# replace newline chars and lowercase
words = [word.replace('\n', '').lower() for word in open('filepath_to_word_list.txt', 'r').readlines()]
# collect user input and lowercase and split into list
user_input = raw_input('Please enter your words').lower().split()

# use set intersection to find if common words exist and print redflag
if set(words).intersection(set(user_input)):
    print('redflag')
else:
    print('noflag')

答案 1 :(得分:1)

with open('redflags.txt', 'r') as f:
    # See this post: https://stackoverflow.com/a/20756176/1141389
    file_words = f.read().splitlines()

# get the user's words, lower case them all, then split
user_words = raw_input('Please enter your words').lower().split()

# use sets to find if any user_words are in file_words
if set(file_words).intersection(set(user_words)):
    print('redflag')
else:
    print('noredflag')

答案 2 :(得分:0)

我建议您使用列表推导

看一下你想要的代码(我将在下面解释):

Redflags = open("redflags.txt")

data = Redflags.readlines()

data = [d.strip() for d in data]

text_post = input("Enter text you wish to analyse:")
text_post = text_post.split()

fin_list = [i for i in data if i in text_post]


if (fin_list):
    print("RedFlag")
else:
    print("NoFlag")

输出1:

Enter text you wish to analyse:i am sad
NoFlag

输出2:

Enter text you wish to analyse:i am angry
RedFlag

首先打开文件并使用readlines()读取它们,这会给出文件

中的行列表
>>> data = Redflags.readlines()
['happy\n', 'angry \n', 'ball \n', 'jump\n']

查看所有不需要的空格,换行符(\ n)使用strip()删除它们!但你不能strip()列表。因此,从列表中取出单个项目,然后应用strip()。这可以使用列表推导来有效地完成。

data = [d.strip() for d in data]

你为什么使用raw_input()在Python3中使用 input()

获取并分割input文字后。

fin_list = [i for i in data if i in text_post]

我正在创建一个项目列表,其中i列表中的data(每个项目)在text_pos列表中。所以这样我就得到了两个列表中的常用项目。

>>> fin_list
['angry']           #if my input is "i am angry"

注意:在python中,空列表被视为false

>>> bool([])
False

有价值的人被视为 True

>>> bool(['some','values'])
True

这样,如果list非空,则执行if。 含义仅当在两个列表中找到某些常用项时,才会打印“RedFlag”。你得到了你想要的东西。