2016-03-23 11 views
0

前の行を印刷し、このファイルには、このようなものです:マッチ文字と私は、ログファイルを持っているのpython

LINE1入力

LINE2出力

LINE3入力

ライン4出力

など...

私は新しいファイルへの入力と出力の両方を抽出したい出力に基づいて

..私は、印刷およびメソッド.startswithを使用するサンプルコードとして

、と私は興味があるため、それは、私が大丈夫ですどのように私はファイルと現在の行の前に、現在の行を引っ張ることができます。ここで

は、私がやった方法です:

file = 'path_to_file' 
index_list = [] 
line_list = [] 

with open(file) as f: 
    for index, line in enumerate(f): 
     line_list.append(line) 
     if line.startswith('b'): 
      index_list.append(index) 


for index in index_list: 
    print line_list[index-1], line_list[index] 

このコードはうまく動作しますが、それを行うにはより多くの神託の方法があります場合、私は、メモリを節約し、疑問に思いました。

ありがとうございます。

BR

答えて

0

リスト内のファイルの行を取得するには、次のコードを使用します。次に、行と前の行を簡単に取り出すことができます。また、大規模なログファイルはPython REPLを遅くする可能性があるので、REPLでこれを実行しないことをお勧めします。

with open(fileName) as file: 
    content = file.readlines() 

希望します。関数にそれを入れて、yieldprintを交換し、あなただけのマッチング入力/出力ペアを書くためにその機能をfile.writelines()を使用することができます

from itertools import izip 

with open('test.log') as lines: 
    for input_line, output_line in izip(lines): 
     if output_line.startswith('b'): 
      print input_line 
      print output_line 

:メモリ内の2行以上を格納することなく

+0

大きなログファイルは、REPLを減速させるだけでなく、ファイル全体をメモリに読み込むプログラムを遅くすることがあります。プロセスがスワッピングを開始すると、システム全体のパフォーマンスが低下する可能性があります。 – BlackJack

関連する問題