2016-06-18 88 views
0

再次道歉爲這裏的noob:嘗試以下代碼以搜索從關鍵字中讀取的多個字符串並在f中搜索並打印行。 它可以工作,如果我只有一個關鍵字,但不是如果我有多個關鍵字。在文件中搜索多個字符串(來自文件)並打印該行

keywords = input("Please Enter keywords path as c:/example/ \n :") 
keys = open((keywords), "r").readline() 
with open("c:/saad/saad.txt") as f: 
    for line in f: 
     if (keys) in line: 
      print(line) 
+1

你能提供一個輸入和預期輸出? –

+0

這個關鍵字文件的格式是什麼?在一行中用空格分隔的一堆單詞? – tdelaney

+0

關鍵字(「AA」,「BB」): 文件包含這樣一行(AA好,BB很不錯,CC不好): 預期的輸出爲: AA好 BB是非常好的 – Saadi381

回答

2

查找關鍵字的挑戰之一就是定義關鍵字的含義以及如何解析文件內容以找到完整的關鍵字集。如果「aa」是關鍵字,它應該匹配「aaa」還是「aa()」?關鍵字是否可以包含數字?

一個簡單的解決方案是說關鍵字只是字母,並且應該匹配連續。字母字符串完全不考慮大小寫,而且,比賽應該算是一行行,不是一句一句我們可以使用正則表達式查找字母序列,並設置檢查遏制像這樣:

keys.txt

aa bb 

test.txt

aa is good 
AA is good 
bb is good 
cc is not good 
aaa is not good 

test.py

import re 

keyfile = "keys.txt" 
testfile = "test.txt" 

keys = set(key.lower() for key in 
    re.findall(r'\w+', open(keyfile , "r").readline())) 

with open(testfile) as f: 
    for line in f: 
     words = set(word.lower() for word in re.findall(r'\w+', line)) 
     if keys & words: 
      print(line, end='') 

結果:

aa is good 
AA is good 
bb is good 

添加更多的規則,你的意思是匹配什麼,它變得更加複雜。

編輯

假設你有每行一個關鍵字,你只想要一個字符串匹配(即,「AA」匹配「AAA」),而不是關鍵字搜索,你可以做

keyfile = "keys.txt" 
testfile = "test.txt" 

keys = [key for key in (line.strip() for line in open(keyfile)) if key] 

with open(testfile) as f: 
    for line in f: 
     for key in keys: 
      if key in line: 
       print(line, end='') 
       break 

但我只是猜測你的標準是什麼。

+0

我有試過這個,但有幾個問題; 1。由於某種原因,它不會搜索任何東西,如果輸入關鍵字每行一個像 aa bb cc 如果我把關鍵字放在一行然後它只返回bb 2。其次,如果我想返回'aaa',以及如果搜索'aa'關鍵字 – Saadi381

+0

,那麼您需要爲're.findall()'函數使用不同的[正則表達式]。 –

+0

輸入文件可以有多種格式,不可能涵蓋所有的可能性。你可以把樣品放在你的問題中,就像我在我的回答中一樣。對於每行一個鍵,您可以逐行讀取文件,去除空白,然後過濾空容器,例如'keys = [key for key in(line.strip()for line in open(keyfile))if key]'。要匹配'「aaa」',你要做一個子串搜索,而不是一個正則表達式。 – tdelaney

0
keywords = input("Please Enter keywords path as c:/example/ \n :") 
keys = open((keywords), "r").readline() 
keys = keys.split(',') # separates key strings 
with open("c:/saad/saad.txt") as f: 
    for line in f: 
     for key in keys: 
      if key.strip() in line: 
       print(line) 

您正在以一個字符串閱讀該行。您需要製作每個逗號分隔字符串的列表。然後測試每條線每個鍵(除圍繞重點空格)

這是假設您的關鍵字的文件是一樣的東西:AA好,BB好,垃圾郵件,雞蛋

相關問題