在CSV文件中查找名称

时间:2016-07-13 05:13:54

标签: python csv

我有代码在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()

3 个答案:

答案 0 :(得分:2)

在循环播放文件之前,只需提出问题:

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))

答案 1 :(得分:2)

您有几个问题:

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

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

然而,这也不够,因为rows现在是一个2D列表,因为每个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')

答案 2 :(得分:0)

您已经迭代过该文件一次。当你试图再次遍历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')