如果语句只迭代第一行

时间:2016-08-02 16:50:27

标签: python-2.7

在csv文件中打印行时,如何在执行if语句时一次迭代整个csv而不是一行?例如:

import csv
nameid = raw_input("ID please")
with open('cards.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for row in reader:
        row = list(row)
        if nameid == row[0]:
            print row
        else:
            print "sorry"

使用此csv:

101,8
102,10
103,5
104,0

将仅使用第一行,然后使用第二行,依此类推,在4次中给出一个错误的声明3。所以,如果我搜索" 102"在我的raw_input中,它将打印:

"sorry"
['102', '10']
"sorry"
"sorry

2 个答案:

答案 0 :(得分:0)

每次都没有给你一个虚假陈述。您正在迭代csv并检查每一行的第一个元素与输入。如果不匹配,请打印“抱歉”。如果是,则打印该行。

如果您只想在找不到匹配项时打印“抱歉”消息,请删除您的else子句。相反,设置一个布尔标志,该标志初始化为false,并且只有在找到匹配项时才设置为true。迭代完成后,如果布尔值仍然为假,则只打印'sorry'消息。

答案 1 :(得分:0)

您实际上非常接近您的预期功能。您不希望为每个不匹配的行打印“抱歉”,因此您不希望else阻止它在哪里。但如果文件中没有任何内容匹配,您确实要打印“抱歉”。事实证明,您只需将else阻挡在左侧的一个级别上,并使其与for块而不是if相对应。你还需要一个额外的一行:

import csv
nameid = raw_input("ID please")
with open('cards.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for row in reader:
        row = list(row)
        if nameid == row[0]:
            print row
            break
    else:
        print "sorry"

现在只有在else块运行完成时才会触发for块(有关此语法的更多信息here)。要确保在没有匹配项时它只运行完成,请添加break以在看到匹配项时立即退出循环。