【问题标题】:Finding a name in a CSV file在 CSV 文件中查找名称
【发布时间】:2016-07-13 05:13:53
【问题描述】:

我有代码可以在 CSV 中找到输入名称,如果存在,它会说是,否则说不。但我在 CSV 中输入了一个名称,但它仍然说不。

代码如下:

import csv

f=open("student.csv","r")
reader=csv.reader(f)
for row in reader:
    print
studentToFind = raw_input("Enter the name of sudent?")
if studentToFind in reader:
        print('yes')
else:
    print('no')
f.close()

【问题讨论】:

    标签: python csv


    【解决方案1】:

    在遍历文件之前只需问问题:

    import csv
    
    studentToFind = raw_input("Enter the name of student?")
    
    f=open("student.csv","r")
    reader=csv.reader(f)
    found = "No"
    for row in reader:
        if studentToFind in row:
            found = "Yes"
    
    f.close()
    
    print('{}'.format(found))
    

    【讨论】:

    • 如果我输入不存在的名称“NO”,它会起作用。但是当我输入 csv 中存在的名称时,输出都是“是”“否”
    【解决方案2】:

    你有几个问题:

    此时第一个reader 为空,因为您已经遍历了它的元素。从file 读取是一次性交易,如果您想多次访问其内容,则需要将其写入数据结构,例如:

    rows = []
    with open("student.csv", newline='') as csvfile:
      reader = csv.reader(csvfile)
      for row in reader:
        rows.append(row)
    

    但这还不够,因为rows 现在是一个二维列表,因为每个row the reader returns 本身就是一个列表。 easy way to search for a value in nested lists 带有列表推导:

    if studentToFind in [cell for row in rows for cell in row]:
      print('yes')
    else:
      print('no')
    

    把它们放在一起,这样缩进就更容易看到了:

    rows = []
    with open("student.csv", newline='') as csvfile:
      reader = csv.reader(csvfile)
      for row in reader:
        rows.append(row)
    
    if studentToFind in [cell for row in rows for cell in row]:
      print('yes')
    else:
      print('no')
    

    【讨论】:

    • 输出4次'
    • 请注意if 语句不在with 语句中。你阅读文件,关闭它,然后搜索rows
    • break 正在工作,但是当找到输入的名称时,它还在 yes 之后打印 NO
    • 是的,我的第一条评论是错误的;您不应该在循环内调用 if 语句。查看我的编辑。
    【解决方案3】:

    您已经对文件进行了一次迭代。当您尝试再次循环 reader 时,没有任何内容可以循环。

    甚至不使用csv 模块并将文件中的行保存到列表中:

    with open("student.csv","r") as f:
        lines = []
        for line in f:
            lines.append(line.rstrip())
    
    studentToFind = raw_input("Enter the name of student?")
    if studentToFind in lines:
        print('yes')
    else:
        print('no')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2015-12-15
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2014-06-01
      相关资源
      最近更新 更多