2017-01-17 12 views
0

3つのデバッグ署名があるtxtファイルがあります。私は3つの文字列のファイルを検索し、両方の文字列が存在する場合にのみ 'defect'とタイプしたいとします。

x = 'task cocaLc Requested reboot' 
y = 'memPartFree' 
z = 'memPartAlloc' 

import re 
f = open('testfile.txt','r') 
searchstrings = ('task cocaLc Requested reboot', 'memPartFree',  'memPartAlloc') 
for line in f(): 
    for word in searchstrings: 
     if any (s in line for s in searchstrings): 
      print 'defect' 

これらの3つの文字列がすべて存在する場合にのみ、ファイルをスキャンして「欠陥」を印刷するための短いスクリプトを作成します。 私はさまざまな方法で作成しようとしていましたが、要件を満たすことができませんでした。

答えて

0

まず、サンプルコードの4行目に小さなエラーがあります。 fは呼び出し可能ではないため、その隣に括弧を使用しないでください。あなたはそれで次の付いたファイルがある場合は

task cocaLc Requested reboot 
memPartFree 
memPartAlloc 

を使用すると、行ごとに一度チェック、一度、各検索文字列のためにしているので、それは「欠陥」を9回出力します。だから、三行、倍の3つの検索文字列がany()関数は、ファイルが定義された検索文字列のうちの少なくとも1種を含むTrueいかなる時間を返します9.

です。したがって、このコードでは、定義した検索文字列の数を乗算した行ごとに「不具合」を1回出力します。

この問題を解決するには、プログラムは特定の検索文字列が検出されたかどうかを知る必要があります。あなたは、このような何かがあります。このコードでは

f = open('testfile.txt','r') 

searchstrings = ['task cocaLc Requested reboot', 'memPartFree', 'memPartAlloc'] 
detections = [False, False, False] 

for line in f: 
    for i in range(0, len(searchstrings)): 
     if searchstrings[i] in line: #loop through searchstrings using index numbers 
      detections[i] = True 
      break #break out of the loop since the word has been detected 

if all(detections): #if every search string was detected, every value in detections should be true 
    print "defect" 

、我々ループラインと検索文字列スルーを、しかしdetection変数は、検索文字列がファイル内で検出された私達に告げるのに役立ちます。したがって、リスト内のall要素が真であれば、そのファイル内ですべての検索文字列が検出されたことを意味します。

+0

おかげさまで多くの助けと説明がありました。 –

関連する問題