2011-09-14 3 views
2

折り返し線を再フォーマットするためのPythonソリューションを見つける手助けが必要です/説明されている改行がないようにログファイルを書き換えます。それによって私は壊れていない線を見つけることができます。テキストファイル内の折り返し線を解除する方法テキストファイルを再フォーマットする

* .logのすべてのエントリにタイムスタンプが付きます。長すぎる行は、期待どおりに折り返されますが、折り返し部分にもタイムスタンプが付きます。 ">"(より大きい)は、行が折り返されたことの唯一の表示です - 位置37で起こります。>ログは* nixマシンからのものです。

私が開始する方法がわからない...

2011-223-18:31:11.737 VWR:tao  abc exec /home/abcd/abcd9.94/bin/set_specb.tcl -s DL 2242.500000 5 
2011-223-18:31:11.737    > -20.000000 10 
###needs to be rewritten as: 
2011-223-18:31:11.737 VWR:tao  abc exec /home/abcd/abcd9.94/bin/set_specb.tcl -s DL 2242.500000 5 -20.000000 10 

と別の

2011-223-17:40:07.039 EVT:703  agc_drift_cal.tcl: out of tolerance drift of 5.3080163871 detected! Downlink Alignmen 
2011-223-17:40:07.039    >t check required. 
###these lines deleted and consolodated as one: 
2011-223-17:40:07.039 EVT:703  agc_drift_cal.tcl: out of tolerance drift of 5.3080163871 detected! Downlink Alignment check required. 

iは、以外に開始する方法がわからない...

for filename in validfilelist: 
    logfile = open(filename, 'r') 
    logfile_list = logfile.readlines() 
    logfile.close 
    for line in logfile_list: 

python 2.7.2

+0

+1はあなたの最初の質問に明確な要件と例を投稿いただきありがとうございます。 – cheeken

+0

"オーバーフローライン"は、タイムスタンプ後にEVT:XXXまたはVWR:YYYを持たないことが保証されていますか? '> 'は行の先頭から同じ位置にあることが保証されていますか? – NullUserException

+0

はい、いくつかのログをスキャンしましたが、>新しい行の開始を保証し、同じ位置にあるようです。それはEVT、またはそれに先行する他のメッセージを持っていません。 – kp1

答えて

0
for filename in validfilelist: 
    logfile = open(filename, 'r') 
    logfile_list = logfile.readlines() 
    logfile.close() 
    for line in logfile_list: 
     if(line[21:].strip()[0] == '>'): 
      #line_is_broken 
     else: 
      #line_is_not_broken 
+0

'with'を使うか、少なくとも実際には' close' - 'logfile.close()'を呼び出してください。 – agf

+0

o、申し訳ありませんが、私はそのコードに多くの注意を払っていませんでした。ただコピー/ペーストしました。 self.notes.append( "コピー/ペーストの前に読む") – fceruti

+1

私はそれがコピーされたことを知らなかったので、私も質問を読んでいない:) – agf

0
#!/usr/bin/python 

import re 

#2011-223-18:31:11.737    > -20.000000 10 
ptn_wrp = re.compile(r"^\d+-\d+-\d+:\d+:\d+.\d+\s+>(.*)$") 

validfilelist = ["log1.txt", "log2.txt"] 

for filename in validfilelist: 
    logfile = open(filename, 'r') 
    logfile_new = open("%s.new" % filename, 'w') 
    for line in logfile: 
     line = line.rstrip('\n') 
     m = ptn_wrp.match(line) 
     if m: 
      logfile_new.write(m.group(1)) 
     else: 
      logfile_new.write("\n") 
      logfile_new.write(line) 
    logfile_new.write("\n") 
    logfile.close() 
    logfile_new.close() 

行が折り返し線でない場合は、改行を書きます。唯一の副作用は最初の空の行です。ログ分析の問題ではありません。新しいファイルは処理された結果です。あなたはfilecontextでそれをラップしている場合

0

これはトリックを行うだろう:

f = [ 
    "2011-223-18:31:11.737 VWR:tao  abc exec /home/abcd/abcd9.94/bin/set_specb.tcl -s DL 2242.500000 5", 
    "2011-223-18:31:11.737    > -20.000000 10", 
    "2011-223-17:40:07.039 EVT:703  agc_drift_cal.tcl: out of tolerance drift of 5.3080163871 detected! Downlink Alignmen", 
    "2011-223-17:40:07.039    >t check required.", 
    ] 

import re 

wrapped_line = "\d{4}-\d{3}-\d{2}:\d{2}:\d{2}\.\d{3} *>(.*$)" 

result = [""] 
for line in f: 
    thematch = re.match(wrapped_line,line) 
    if thematch: 
     result[-1] += thematch.group(1) 
    else: 
     result.append(line) 

print result 
関連する問題