2013-06-05 19 views
5

私は任意の行数のログファイルを持っています。私が必要とするのは、文字列 "Total"で始まるログファイルからの1行のデータを抽出することだけです。私はファイルから他の行を望んでいません。ログファイルの解析Python

このために簡単なPythonプログラムを書くにはどうすればよいですか?

これは私の入力ファイルは、私が

TestName  id  TPS   GRE 
Totals  64  129.61  145.64 

は、[OK]を..だから私は望んでいたように見える出力ファイルを取得しようとしています

TestName  id   eno   TPS  GRE   FNP 
Test 1205 1   0   78.00  0.00   0.02 
Test 1206 1   0   45.00  0.00   0.02 
Test 1207 1   0   73400  0.00   0.02 
Test 1208 1   0   34.00  0.00   0.02 

Totals  64   0   129.61  145.64  1.12 

どのように見えるかあるだけ第一、第二、第四と入力ファイルの5番目の列は他の列ではありません。私はこれを達成するためにリスト[インデックス]を試していますが、IndexError :(リストのインデックスが範囲外です)を取得しています。また、2列の間のスペースは同じではないので、私は列を分割し、私が望むものを選択する方法がわかりません。誰か助けてもらえますか?以下、私はPythonは、このタスクのためにやり過ぎのように思える

newFile = open('sana.log','r') 

for line in newFile.readlines(): 

    if ('TestName' in line) or ('Totals' in line): 

     data = line.split('\t') 

     print data[0]+data[1] 
+2

を使用したプログラムは...速くすることはgrepないでしょうか? –

答えて

3
theFile = open('thefile.txt','r') 
FILE = theFile.readlines() 
theFile.close() 
printList = [] 
for line in FILE: 
    if ('TestName' in line) or ('Totals' in line): 
     # here you may want to do some splitting/concatenation/formatting to your string 
     printList.append(line) 

for item in printList: 
    print item # or write it to another file... or whatever 
1
for line in open('filename.txt', 'r'): 
    if line.startswith('TestName') or line.startswith('Totals'): 
     fields = line.rsplit(None, 5) 
     print '\t'.join(fields[:2] + fields[3:4])