2016-12-27 2 views
0

Ich bin neu bei Python und versuche, eine txt-Datei mit Stichwörtern aus einer anderen TXT-Datei zu durchsuchen. Mein Code sieht wie folgt aus so weit:Python: Verwenden einer Liste von Schlüsselwörtern, die in einer TXT-Datei gesucht werden

testfile=open('D:\\Coding\\testfile.txt') 
keywordfile=open('D:\\Coding\\keyword.txt') 

testfile.seek(0,0) 
keywordfile.seek(0,0) 
for keyword in keywordfile: 
    print('\n****************\nlooking for: ', keyword) 
    testfile.seek(0,0) 
    for line in testfile: 
      if keyword in line: 
       print('keyword: ', keyword) 
       print('line: ', line) 

Die keyword.txt folgendes enthalten:

quick 
fox 
jumps 

Und Testfile.txt folgende Komponenten enthalten:

the quick 
brown fox jumps 
over the lazy dog 
near the river banks 

Es soll finden jedes Schlüsselwort in tesfile.txt und drucke es, aber wenn ich über Code laufen lasse, habe ich die folgenden Resultate:

**************** 
looking for: quick 


**************** 
looking for: fox 


**************** 
looking for: jumps 
keyword: jumps 
line: brown fox jumps 

Es findet nicht die ersten zwei Schlüsselwörter und findet stattdessen nur die letzte.

Ich habe das Gefühl, dies könnte nur ein einfacher Fehler meinerseits sein, aber ich würde Ihre Hilfe sehr schätzen, wenn ich klarstellen wollte, wo ich falsch lag.

Danke!

+0

In jedem Öffnen benötigen Sie (Dateiname, "r") zum Lesen der Datei – Octo

Antwort

0

Zunächst empfehle ich Ihnen die Dateien einmal zu lesen und Speichern Sie sie im Speicher, damit Sie sie nicht jedes Mal neu lesen müssen. Sie können die Anweisung von Python verwenden, damit Sie sie nach der Verarbeitung nicht schließen müssen.

with open("testfile.txt", "r") as f: 
    testfile = f.readlines() 

with open("keywords.txt", "r") as f: 
    keywords = f.readlines() 

Dann ist der Fehler im Code, dass die Zeilen in einer Datei mit dem Newline-Zeichen \n oder Leerzeichen ' ' enthalten. Python hat eine praktische Funktion, um dieses Problem zu lösen: strip(). Hier ist der Schleifencode:

for keyword in keywords:    
    kw = keyword.strip()  
    print('\n***********\nlooking for: ', kw) 
    for line in testfile: 
     if kw in line: 
      print('keyword: ', kw) 
      print('line: ', line) 
+1

Danke! Ich mag die Einfachheit Ihres Vorschlags. Hat viel geholfen. Prost! –

+0

Froh, dass es geholfen hat :) – Blackecho

0

Ich denke, Sie haben Probleme beim Lesen von Stichwörtern, es kann auch die \ n oder \ t oder \ r Zeichen oder Leerzeichen ('') am Ende enthalten. Wie über Sie string.replace nutzen diese Möglichkeit zu beseitigen:

if keyword.replace(' ','').replace('\n','') in line: 

oder auch string.strip() in Python verwenden können:

if keyword.strip(' \t\n\r') in line: 
0

Gedanke an diese von der Oberseite meines Kopfes

lines1 = testfile.readlines() 
lines2 = keywordfile.readlineS() 

searchList = [] 

for line in line2: 
    lineSplit = line.split(" ") 
    for item in lineSplit: 
     searchList.append(item) 

for item in searchList: 
    for line in line1: 
     if item in line: 
      print(line) 
0

Sie etwas tun können:

from itertools import cycle 

with open('test_file','r') as tf, open('keyword_file', 'r') as kf: 
    keywords = [k.strip() for k in kf] 
    for lineno, line in enumerate(tf): 
     for i, key in enumerate(cycle(keywords)): 
      if i==len(keywords): 
       break 
      if key in line.strip(): 
       print "Keyword: '"+key+"' found on line: "+str(lineno) 

Ausgang:

Keyword: 'quick' found on line: 0 
Keyword: 'fox' found on line: 1 
Keyword: 'jumps' found on line: 1 
Verwandte Themen