2016-04-14 8 views
1

私がやっていることは、pythonスクリプトを使ってApacheのerror_logファイルからレポートを作成することです。私が取り扱っておりますものの例は次のとおりです。末尾のテキストが続くエラータイプですファイル内の行から複数​​の部分文字列を読む

core:notice - SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0 
suexec:notice - AH: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 

:私は次のようになります取得しようとしている

[Wed Apr 13 18:33:42.521106 2016] [core:notice] [pid 11690] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0 
[Wed Apr 13 18:33:42.543989 2016] [suexec:notice] [pid 11690] AH: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 

最終結果。私は、この書式設定されたテキストを新しいファイルに書き込む必要があります。

私はこれを行うために正規表現を使用しようとしてきましたが、私はPythonをまったく使用していないので、以前は正規表現を使用していません。私がこれまでに得ることのできる最大のものは、最初の(日付)セクションを分離することですが、後続のブラケット囲まれた部分文字列と末尾のテキストを取得する方法を理解することはできません。すべての助けが大いに評価されるでしょう!あなたのデータは正確に4つの分野で構成されているので

+0

エラーログの生サンプル行をいくつか投稿できますか? – TheLazyScripter

+0

私はそれをしました、それは最初のブロックです。 [Wed Apr] etc行はログからまっすぐです。 – zimty

答えて

2

が最後のものを除き、フィールドごとに素敵な二乗ブラケットで示されているが、あなたはこのようにRegexを使用せずに作業を行うために、これらの行動からの利点を取ることができる:

texts = ['[Wed Apr 13 18:33:42.521106 2016] [core:notice] [pid 11690] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0', \ 
'[Wed Apr 13 18:33:42.543989 2016] [suexec:notice] [pid 11690] AH: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)'] 
for text in texts: 
    words = text.replace('[','').split(']') 
    newWords = words[1] + ' -' + words[3] 
    print(newWords) 
で結果の

:アイデアが最初に空の文字列と1つの開始二乗ブラケットを交換し、閉鎖を使用することです

core:notice - SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0 
suexec:notice - AH: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 

はあなたを分割するためのパラメータとしてブラケットを乗ワード(これあまりにも削除されます):あなたが行われてい

newWords = words[1] + ' -' + words[3] 

そして:

words = text.replace('[','').split(']') 

は、その後、あなたは単にあなたがあなたの新しいstringから形成するフィールドを結合する必要があります。

+0

ああ、それは私がやろうとしていたものよりずっと簡単です!私は説明にも本当に感謝しています。 – zimty

+1

@zimtyうん、最初に 'string'の特性を悪用しよう! :) Regexは単純なケースでは過度の攻撃になるかもしれません。 – Ian

関連する問題