2016-07-13 2 views
0

Ich habe Code, der den eingegebenen Namen in einer CSV findet, wenn es vorhanden ist, sagt es ja sonst nein. Aber ich habe einen Namen eingegeben, der in der CSV-Datei vorhanden ist, aber immer noch nein. HierSuche nach einem Namen in einer CSV-Datei

ist der Code:

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

Antwort

0

Sie haben bereits über die Datei einmal wiederholt. Wenn Sie versuchen, erneut über reader zu loopen, gibt es keine Schleife mehr.

Statt nicht einmal das csv Modul verwenden und die Zeilen in der Datei in einer Liste speichern:

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') 
+0

noch "nein" ist eine Antwort .. –

2

einfach die Frage, bevor Sie eine Schleife über die Datei fragen:

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

das funktioniert, +1. – bernie

+0

es funktioniert, wenn ich den Namen eingeben, der nicht vorhanden ist "NEIN". Aber wenn ich den Namen, der in der CSV vorhanden ist eingeben, dann ist der Ausgang sowohl "Ja" "NEIN" –

+0

Ah ja gute Beobachtung, behoben. –

2

Sie habe ein paar Probleme:

Zuerst reader ist an dieser Stelle leer, da Sie bereits über seine Elemente geloopt haben. Lesen aus einem file ist eine einmalige Sache, wenn Sie als sein Inhalt mehr zugreifen möchten, wenn Sie es auf eine Datenstruktur schreiben müssen, zB:

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

dies wird nicht jedoch auch ausreichend sein, weil rows ist jetzt eine 2D-Liste, da jede row the reader returns selbst eine Liste ist. Eine easy way to search for a value in nested lists ist mit Listenkomprehensionen:

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

es zusammen, so dass die Vertiefung der leichter zu sehen:

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') 
+0

Es gibt Ausgabe 4 mal ' –

+0

Beachten Sie, dass die 'if' Anweisung nicht innerhalb der' with' Anweisung ist . Sie lesen die Datei, schließen sie, * dann * suchen Sie nach Zeilen. – dimo414

+0

Pause funktioniert, aber es druckt auch NO nach ja, wenn der eingegebene Name gefunden wird –