2011-02-01 7 views
2

私は迅速なログ解析ツールを作っています:ログファイルを処理するPythonとストリッピング文字

findme = 'important ' 
logf = file('new.txt') 
newlines = [] 

    for line in logf: 
     if findme in line: 
      line.partition("as follows: ")[2] 
      newlines.append(line) 


outfile = file('out.txt', 'w') 
outfile.writelines(newlines) 

ない私は、テキストを削除するには、パーティションのようなものを使用して行くべきかわから「次のように」との前にすべてのものこれは1行ごとに行われます。私はエラーは出ませんが、私が取り除こうとしているテキストは出力に残っています。

+3

'file'は' open'を使わないでください。これは構文上有効なPythonのようなものでもありません。 – SilentGhost

答えて

3

Plusは、私はライン

line.partition("as follows: ")[2] 

について少し困惑しています。単に何もしません。あなたが望んでいたかもしれない

line = line.partition("as follows")[2] 

?ちなみに、末尾に巨大なwritelinesの代わりにforループの各行を書く方が良いでしょう。あなたの現在のソリューションは、大容量のファイルに対しては大量のメモリを使用し、無限のファイルでは全く動作しません。

最終版は次のようになりますこと:

findme = 'important ' 
outfile = open('out.txt', 'w') 
for line in open('new.txt'): 
    if findme in line: 
     outfile.write(line.partition('as follows: ')[2]) 
+0

ありがとう、ありがとう – Mathnode

1

ここに正規表現でだ

import re 

findme = 'important ' 
pat = re.compile('.*(%s)?.*as follows: ((?(1).*\n|.*%s.*\n))' % (findme,findme)) 

with open('new.txt','r') as logf, open('out.txt','w') as outfile: 
    for line in logf: 
     m = pat.match(line) 
     if m: outfile.write(m.group(2)) 
利点は、それがただ を持つよりも、特定のアイテムを検索することが可能になることである

場合findmeで'指示 たとえば、findme = '(?<!A)AAA(?!A)'では、厳密に「AAA」に基づいて検索しますが、では「A AAA '

関連する問題