如何在for循环中检查特定值然后结束?

时间:2019-04-04 13:52:33

标签: python csv

今天是我第一次学习csv和python。对不起,如果我问一个已回答的问题。我正在使用CSV dictreader。可以说我有一个包含以下行的文件:

{'age': '20', 'name': 'Alice'}
{'age': '21', 'name': 'Freddie'}
{'age': '17', 'name': 'Bob'}

我将创建一个程序,允许用户输入其名称。如果它与数据匹配,它将输出true。我尝试在其中使用for循环和if else语句。

但是,它循环整个数据而不是我正在查看的特定数据。例如,如果我输入“鲍勃”,我得到

Enter Name:Bob
No record found
No record found
true

代替

Enter Name:Bob
true

我相信这是因为我创建了for循环,但我仍然不确定如何应对它。

import  csv

name1 = input("Enter Name:")

filePath = "data.csv"
with open(filePath) as  csvfile:
    reader = csv.DictReader(csvfile)    
    for row in reader:
        if name1 == row['name']:
            print("true")       
            break            
        else:                     
            print("No record found")

3 个答案:

答案 0 :(得分:2)

<th> @Html.DisplayNameFor(model => model.YearCompleted) </th> 在最后一行,因此它必须从头开始遍历所有行,直到找到Bob然后它存在。

您可能只想在末尾打印Bob,而不是在每次迭代中都打印。这是使用标记来记住是否找到该术语的建议:

No records found

答案 1 :(得分:1)

No record found消息放入for循环是错误的。

无论您放入for循环中的任何内容,都可以运行0、1或多次。对于No record found消息,很多没有任何意义。

因此,该消息必须超出for循环之外:

for row in reader:
    if row['name'] == name1:
        print("found it")
        return
print("no record found")

答案 2 :(得分:1)

Python中的

for(和while)循环实际上可以在其后有一个else。仅当循环没有被break中断时,才输入此子句。因此,您只需缩进else子句:

with open(filePath) as csvfile:
    reader = csv.DictReader(csvfile)    
    for row in reader:
        if name1 == row['name']:
            print("true")       
            break
    else:                     
        print("No record found")