2016-03-26 8 views
2

Der Benutzer gibt Daten ein. Die Daten werden über die gesamte Zeile einer Datei geprüft. Wenn das, was er eingibt, einer Zeile entspricht, wird gedruckt.Überprüfen Sie, ob mehrere Übereinstimmungen in einer Datei in Python vorhanden sind.

Wenn die Ergebnisse mehr als eins sind, möchte ich den Eintragsprozess so lange wiederholen, bis der Benutzer seine Auswahl so verfeinert hat, dass nur noch ein Ergebnis gefunden wird. Was kann ich verwenden, wo 'mutipleAnswersAreFound'?

Mein Code:

def search() 
    with open("file.txt") as f: 
     nameSearch = str(raw_input("Enter first name, last name, email, or phone: ")) 
     for line in f: 
      if nameSearch in line: 
       print line 
      else if 'mutipleAnswersAreFound' : 
       search() 

Antwort

1

line.count(nameSearch) wird die Anzahl der nameSearch erscheint in der Zeichenfolge line zurück. Wenn diese Anzahl mehr als 1 ist, haben Sie Ihre elif Fall.

zB

"aaa".count("aa") wird 2 zurückkehren, da wir zwei Vorkommen der Folge haben „aa“

Ihr Code so etwas wie

cnt = line.count(nameSearch) 
if cnt == 1: 
    print line 
elif cnt > 1: 
    search() 

aussehen Wenn Sie die Ereignisse wollen durch abgegrenzt werden ein Leerzeichen dann können Sie dies tun

words = line.split() 
cnt = 0 
for word in words: 
    if nameSearch == word: cnt += 1 
    if cnt > 1: break 
if cnt == 1: 
    print line 
elif cnt > 1: 
    search() 
0

es in einer Endlos-Schleife Wickeln Sie es bricht, wenn Anzahl kleiner oder gleich 1 ist

def search() 
    while True: 
    count=0 
    with open("file.txt") as f: 
     nameSearch = str(raw_input("Enter first name, last name, email, or phone: ")) 
     for line in f: 
     if nameSearch in line: 
      print line 
      count+=1 
     if count > 1 : 
     print 'Multiple matches, please refine your search' 
     else: 
     break 
0

Ich denke, dass Sie reguläre Ausdrücke, import re in Python verwenden könnten. zum Beispiel:

import re 
expression = re.compile('(wordto)') 
example = ' hi worldto, how are wordto xD wordto' 
matches = expression.findall(example) 
if matches: 
    print matches 
    print 'the count is', len(matches) 

>>>['wordto', 'wordto'] 
>>>the count is 2 
Verwandte Themen