行に特定の文字列が含まれている場合は、Pythonでファイルを印刷する方法は?

行に特定の文字列が含まれている場合は、Pythonでファイルを印刷する方法は?

ファイル名にaが含まれている場合は、ファイル名を印刷しようとしています**Error***(ここで*は何でも構いません。たとえば、、、Rock_Error_addr(最初にスペースがあるかもしれません))Error_salaryTinaError_addr正確な文字列を含む正規表現を使用して印刷できます。しかし、上記の状況でどのように使用するかは少し混乱しています。

with open ('input.txt', 'r') as i:
    for line in i:
        a = re.search ('Error_salary', line) #I also tried a=re.search ('\s+Error\w+', line)
        print (line)

上記のコードでは、特定の文字列のみを印刷できます。エラーを含むすべてのアイテムを印刷したいです。どんな助けでも大変感謝します。ありがとう

答え1

forこれは、文字列に対してループを実行すると、文字列の各文字が繰り返されるためです。

>>> glob.glob( '*.rpt' )
['test.rpt']
>>> for i in 'test.rpt':
...  print i
...
t
e
s
t
.
r
p
t

これはうまくいくようです:

import glob
with open( 'output.txt', 'w' ) as w:
   for file in glob.glob( '*.rpt' ):
      with open( file, 'r' ) as r:
         w.writelines( r.readlines() )
    

答え2

コードを少し修正してから、読み取った行でエラー文字列が検出されたらすぐに+をpython生成します。ifbreak

import re
with open('input.txt', 'r') as i:
    for line in i:
        if re.search(r'Error', line):
            print('input.txt')
            break

ただし、リテラル文字列エラーだけが見つかるので、正規表現は必要ありません。

if 'Error' in line:

うまくいきます。

関連情報