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