2016-12-27 120 views
0

我是新來的python和im試圖通過一個txt文件,使用其他txt文件中的關鍵字進行搜索。 我的代碼看起來像這樣至今:python:使用在txt文件上搜索的關鍵字列表

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) 

的keyword.txt包含以下內容:

quick 
fox 
jumps 

而且TESTFILE.TXT包含以下內容:

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

它應該找到tesfile.txt中的每個關鍵字並打印它,但是當我運行上面的代碼時,我有以下結果:

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


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


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

它沒有找到前兩個關鍵字,而是隻找到最後一個。

我有一種感覺,這可能只是我的一個簡單的錯誤,但我真的很感謝你的幫助,以澄清我錯了。

謝謝!

+0

在你需要的每一個打開(文件名,「r」)讀取文件 – Octo

回答

0

首先,我建議你曾經看過的文件和將它們保存在內存中,這樣您就不必每次都重新讀取它們。你可以在語句中使用Python,所以在處理後你不必關閉它們。

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

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

然後,在你的代碼中的錯誤是,在一個文件中的行可能包括換行符\n或空格' '。 Python有一個方便的函數來解決這個問題:strip()。這裏的循環代碼:從我頭頂的這

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

謝謝!我喜歡你的建議的簡單性。幫了很多。乾杯! –

+0

很高興幫助:) – Blackecho

0

我認爲在閱讀關鍵字時你遇到了問題,它最後也可能包含\ n或\ t或\ r字符或空格('')。如何使用要與string.replace消除了這種可能性:

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

,或者你也可以使用Python的string.strip():

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

思想

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

你可以做這樣的事情:

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) 

輸出:

Keyword: 'quick' found on line: 0 
Keyword: 'fox' found on line: 1 
Keyword: 'jumps' found on line: 1 
相關問題