2016-06-18 14 views
0

もう一度お詫び申し上げます:複数の文字列を検索してキーワードから読み込んで、fで検索して行を印刷するコードを試してみてください。 キーワードが1つしかない場合は機能しますが、それ以上のキーワードがない場合は機能します。ファイル内の複数の文字列(ファイルから)を検索し、行を印刷

+1

あなたは入力を提供し、予想でした、BBはスパム、良いですが、AA良いです。そして、各行の各キーをテストする(キーの周りの空白を削除)

これは、キーワードファイルを想定しているようなものがあります出力? –

+0

このキーワードファイルの形式は何ですか?スペースで区切られた1行の単語の束? – tdelaney

+0

キーワード(「AA」、「BB」): ファイル(aaは良いですが、BBは非常に良いですが、ccは良くありません)のような行が含まれていますよう 期待出力: AAは良い BBですが、私が持っている – Saadi381

答えて

2

キーワードを探す際の課題の1つは、キーワードの意味と、キーワードの完全なセットを見つけるためにファイルの内容を解析する方法を定義することです。 "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 

はあなたが試合で何を意味するかのために複数のルールを追加し、それがより複雑になります。

EDIT

代わりにキーワード検索を使用すると、1行につき1つのキーワードを持っているし、あなただけの(つまり、「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。何らかの理由で、キーワードが1行に1つずつ入力されても何も検索されません。 aa bb cc キーワードを1行に入力すると、bbが返されます。 2。第2に、 'aa'キーワードが検索された場合にも 'aaa'を返したい場合は、 – Saadi381

+0

の場合、 're.findall()'関数には別の[正規表現]が必要です。 –

+0

入力ファイルには多くの形式があり、すべての可能性をカバーすることは不可能です。あなたは私の答えのようにあなたの質問にサンプルを入れることができます。 1行につき1つのキーについては、行単位でファイルを読み込み、空白を取り除き、 'keys = [キーの場合はキー(line.strip()の行を開く(キーファイル)の場合はキー)'のように空をフィルタリングすることができます。 '' 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) 

あなたは1つの文字列として読み込んでいます。カンマ区切りの各文字列のリストを作成する必要があります。卵は

関連する問題