2017-07-28 28 views
0

Diese Frage ist möglicherweise ein Duplikat, aber alle Antworten, die ich finde, scheinen nicht zu funktionieren. Ich habe eine .txt-Datei voll von diesem Layout:Python 3: Zeile in Datei suchen

Künstler - Gesang, www.link.com

ARTIST2 - song2, www.link2.com

Das ist mein Allzweck:

uinput = input("input here: ") 

save = open("save.txt", "w+") 
ncount = save.count("\n") 

for i in range(0, ncount): 
    t = save.readline() 
    if uinput in t: 
     print("Your string " uinput, " was found in" end = "")   
     print(t) 

Meine Absicht ist: Wenn das UserInput Wort in einer Zeile gefunden wurde, dann drucken Sie die gesamte Zeile oder den Link.

Antwort

1

können Sie verwenden Liste Verständnis die Datei zu lesen und nur die Linien erhalten, die das Wort enthalten, zum Beispiel:

with open('save.txt', 'r') as f: 
    uinput = input("input here: ") 
    found = [line.rstrip() for line in f if uinput.lower() in line.lower()] 
    if found: 
     print('Found in these lines: ') 
     print('\n'.join(found)) 
    else: 
     print('Not found.') 

Wenn Sie nur den Link drucken möchten, können Sie Folgendes verwenden:

found = [line.rstrip().split(',')[1] for line in f if uinput.lower() in line.lower()] 
4
  1. Sie möchten die Datei lesen, aber Sie öffnen die Datei im Schreibmodus. Sie sollten r verwenden, nicht w+

  2. Der einfachste Weg, um eine Datei zu iterieren ist eine for Schleife haben, direkt über das Dateiobjekt

  3. kein Fehler, sondern ein nitpick iterieren. Sie schließen Ihre Datei nicht. Sie können hier Abhilfe schaffen mit with.. as Kontext-Manager


uinput = input("input here: ") 

with open("save.txt", "r") as f: 
    for line in f: 
     if uinput in line: 
      print('Match found') 
0

Mithilfe des Listenverständnisses können Sie die Zeilen abrufen, die Benutzereingabewörter enthalten. verwenden Sie den folgenden Code:

try: 
    f = open("file/toyourpath/filename.txt", "r") 
    data_input = raw_input("Enter your listed song from file :"); 
    print data_input 
    fetch_line = [line for line in f if data_input in line] 
    print fetch_line 
    f.close() 
except ValueError, e: 
    print e 
Verwandte Themen