2016-06-15 25 views
-1

私はpythonを使って、行ごとにログファイルを検索しようとしています。 両方の文字列を含む行をキャプチャしたい"apple" and "banana"Pythonの別の文字列で2つの文字列を検索する

一部の行しか"apple"と同様にいくつかの行だけ"banana"が含まれて含まれています。行に両方の文字列が含まれているかどうかを確認して、次の条件に入る方法はありますか?

ここに私が今やっていることがありますが、それはまだ機能していません。

APPLE = "APPLE" 
FAILURE_MSGS { 
    APPLE: "apple" 
} 

for line in out.splitlines(): 
    if FAILURE_MSGS[APPLE] and "banana" in line: 
     <do something special with this line> 

何かがあなたが"apple"が期待される障害メッセージの他の誰かのリストから、あらかじめ定義されていると私も"banana"を見つけるために探していますが、私はFAILURE_MSGSの辞書に追加することになっていないよ、気づくかもしれませんので注意します。

何が起こって終わることは、それが両方見つけたときだけでなく、「『りんご』」または「『バナナ』」を持つすべての行であるです。わからないなぜ..

+3

FAILURE_MSGS [APPLE]行と 'banana'行の場合はどうすればいいですか? – mgilson

+0

@mgilsonがコメントしたように、 'apple 'と' banana'という行を 'if 'とすることで、これら2つの条件を組み合わせることはできません。あなたはそれぞれの条件を別々に綴る必要があります: ''リンゴ 'の行と' banana 'の行: ' –

答えて

1

正しいコードは次のとおりです。

for line in out.splitlines(): 
    if FAILURE_MSGS[APPLE] in line and "banana" in line: 
     <do something special with this line> 

何あなたのコードがやっている:

  • FAILURE_MSGS [APPLE]があれば - すべての空でない文字列 がtrueであるためtrueを返す
  • 「バナナ」がライン内にある場合 - バナナがライン内にある場合にのみ真を返します

"apple"に関係なく、 "banana"を持っているすべての行を取得します

+0

ありがとうございました!論理は今も意味をなさない。私は何がうまくいかないかを見ます。 –

2

条件を変更する必要があります。今、あなたは "apple"が真で、 "banana"がラインに入っているかどうかを調べるためにテストしています。あなたは "バナナ"を含むすべての行で終わるでしょう。

あなたはそれを変更する場合:

if FAILURE_MSGS[APPLE] in line and "banana" in line: 

、あなたが(「りんご」と「バナナ」の両方を含む行のみを処理する)あなたが期待する行動を取得する必要があります。

+0

Upvoted、ありがとう! @ TehSphinXの答えに対する私のコメントによれば、これはうまくいった。 –

関連する問題