2015-11-19 60 views
1

读取输入我试图找出为什么我得到多个返回结果为其他声明。 我正在尝试从文件读取。用户将输入一些东西 ,如果文件 中某个单词或句子/编号匹配,则打印出该行。它工作正常,如果发现字里面该文件。文件 内容打印出文档中的匹配词。 但我的问题涉及else语句。如果该单词不在文档中,则使用else的打印语句打印出每一行。 我明白我有它内为循环,它会遍历所有实例文件中的行 。我的最终目标是打印出一个else语句的实例,而不是每行。无(else语句)在Python中循环,并从文件

file=open('new_file.txt','r') 
new_user=input(str('NEW: ')) 
for line in file: 
    line=str(line) 
    if new_user in line: 
     print('yes its in here: ',line) 
    else: 
     print('Word: ',new_user,' not in here') 
file.close() 

输出,打印出的文档中找到正确的路线:

新:丹尼 是它在这里:10101他知他知。 danny

输出WITH(else):打印出所有不匹配的行。我只是想打印出的其他块的声明,多数民众赞成的一个实例:

新:花花公子

字:哥们不是在这里

字:哥们不是在这里

字:哥们不是在这里

字:哥们不是在这里

字:花花公子并不在于此

字:哥们不是在这里

字:哥们不是在这里

字:哥们不是在这里

字:哥们不是在这里

字:哥们不是在这里

Word:伙计不在这里

Word:dude not在这里

字:哥们不是在这里

字:哥们不是在这里

字:哥们不是在这里

字:哥们不是在这里

字:哥们不在这里

Word:伙计不在这里

输出与else语句在文档输入匹配的名字:

新:丹尼

字:丹尼不是在这里

字:丹尼不是在这里

字:丹尼不在这里

Word:丹尼不在这里

字:丹尼不是在这里词:丹尼不是在这里

字:丹尼不是在这里

字:丹尼不是在这里

是它在这里:10101难道他知道他是否知道。丹尼

字:丹尼不是在这里

字:丹尼不是在这里

字:丹尼不是在这里

字:丹尼不是在这里

字:丹尼不这里

Word:丹尼不在这里

字:丹尼不是在这里

字:丹尼不是在这里

字:丹尼不是在这里

在正确的方向任何帮助将是巨大的。

感谢, 丹尼

回答

2

设置一个标志,并打印它,当你检查完文件。

file=open('new_file.txt','r') 
new_user=input(str('NEW: ')) 
flag = False 
for line in file: 
    line=str(line) 
    if new_user in line: 
     print('yes its in here: ',line) 
     flag = True 
if not flag: 
    print('Word: ',new_user,' not in here') 
file.close() 
+0

非常感谢你这个工作完美 –

0

你必须像使用一个标志一样,如果你匹配这个词就会显示出来。例如:

file=open('new_file.txt','r') 
new_user=input(str('NEW: ')) 
notFound = 1 # The flag that shows if the user was found. 
for line in file: 
    line=str(line) 
    if new_user in line: 
     print('yes its in here: ',line) 
     notFound = 0 # Now is false. 
if notFound: # Check if the user wasn't found. 
    print('Word: ',new_user,' not in here') 
file.close() 

我认为应该有效。

+0

这个作品非常完美谢谢你的回应 –

1

另一种选择而不是使用标志是将此逻辑封装在函数中,并且如果找到该单词则返回该行,或者如果该行未找到,则返回None

def find_word (file, word): 
    with open(file) as infile: 
     for line in infile: 
      if word in line: 
       return line 
    return None 

new_user=input(str('NEW: ')) 
ln = find_word('new_file.txt', new_user) 

if (ln): 
    print('yes its in here: ',ln) 
else: 
    print('Word: ',new_user,' not in here') 

说明:

通过尽快找到一个匹配的函数内部返回,可以确保它仅会回报你正在寻找的关键字的第一个实例。

在切换到使用with open('filename') as ...语法打开文件时,您将获得如下优点:如果在读取文件时引发异常,文件仍将被关闭。它还会在返回之前关闭文件。您目前使用file=open(...)首次打开文件的方法,然后在最后使用file.close()明确关闭该文件意味着在某些情况下文件不能正确关闭。 (这可能不是问题,但可能在未来)

另一个优点是,将代码转换为函数可以使用不同的搜索关键字多次运行查询。

+0

这也是诀窍和它的内部功能 –