【问题标题】:How to Add an Elif Statement After Searching for a String in a CSV File如何在 CSV 文件中搜索字符串后添加 Elif 语句
【发布时间】:2015-10-06 20:14:56
【问题描述】:

使用这篇文章 Search for string in CSV Files using python and write the results 中的代码,当在数据库中找不到字符串时,我如何让代码打印“未找到”,因为目前我可以让它打印它,但它打印了 4 次当我只想要一次的时候。我发现它打印未找到的次数与 csv 文件中的记录一样多,例如,如果文件中有 5 条记录,它将打印 'not found' 5 次。

 import csv

 search_for = ['OneTouch AT','LinkRunner AT','AirCheck']

 with open('in.csv') as inf, open('out.csv','w') as outf:
     reader = csv.reader(inf)
     writer = csv.writer(outf, delimiter='\t', quotechar='"', quoting=csv.QUOTE_MINIMAL)
     for row in reader:
         if row[0] in search_for:
             print('Found: {}'.format(row))
             writer.writerow(row)
        if row[0] not in search_for:
            print ('not found')

【问题讨论】:

    标签: python csv


    【解决方案1】:

    如果只有一次匹配,您可以使用break 提前结束for 循环;然后你可以添加一个else 阻止循环;它只会在你 not 跳出循环时执行(例如,当没有找到匹配项时:

    for row in reader:
        if row[0] in search_for:
            print('Found: {}'.format(row))
            writer.writerow(row)
            break
    else:
        print ('not found')
    

    换种说法:上述for 循环的else:在循环的所有迭代完全执行且未被中断的情况下执行。如果 break 被执行,它不会执行。

    由于break 仅在您找到匹配项时才会执行,因此您将写出一个匹配项并且'not found' 不会打印出来。如果未找到匹配项,则所有迭代都完成并打印'not found'

    如果可以有多个匹配项,则不能使用break,因为这会在第一个匹配项之后结束搜索。相反,使用标志变量;从False 开始,找到匹配项时将其设置为True。在循环之后,测试那个标志变量,如果它仍然设置为False,你就知道没有找到匹配项:

    found = False
    
    for row in reader:
        if row[0] in search_for:
            print('Found: {}'.format(row))
            writer.writerow(row)
            found = True
    
    if not found:
        print ('not found')
    

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多