2012-03-08 3 views
0

私はLinux/Unixのsyslogファイルを持っており、日付と時刻を変数に分けたいと思います。どのように私はそれをPythonで達成することができますか?Pythonのフィールドを区切ります

ここでは、ログフォーマットです:

は、

Feb 26 14:20:04 laptop kernel: [19.392640] ip_tables: (C) 2000-2006 Netfilter Core Team 

私は変数にFebを入れたいと同じ日(26)に行く時間(午前14時20分04秒)、などシェルスクリプトでは、cut -d " " -f 1-4で行うことができます。ここで、" "は区切り文字で、1-4はフィールド番号です。

ありがとうございます!

答えて

3

cutをエミュレートしたい場合は、スペースを分割してエントリ1-4を取ることができます。

>>> logline = 'Feb 26 14:20:04 laptop kernel: [19.392640] ip_tables: (C) 2000-2006 Netfilter Core Team' 
>>> logline.split(' ')[0:4] 
['Feb', '26', '14:20:04', 'laptop'] 

(あなただけではなく、最初の3つのフィールドをしたいでしたか?)

また、正規表現を使用することができますが、私はそれが、この場合には必要はないと思います。

+0

男それです!できます!ありがとうございました! – rootj

0

私はあなたが少し低いと思っています。 Pythonは非常に強力です。あなたの主な問題は、あなたのログファイル形式に年フィールドがなく、タイムゾーンオフセットフィールドが不足していることです(時計が戻った日にあいまいです)。最新のsyslogの多くのバージョンでは、タイムスタンプ形式を変更できるので、修正することは可能です。

$ cat log-parse.py 
logdata="Feb 26 14:20:04 laptop kernel: [19.392640] ip_tables: (C) 2000-2006 Netfilter Core Team" 


import re 
logrx = re.compile('([^ ]+ [0-9][0-9]? [0-9][0-9]:[0-9][0-9]:[0-9][0-9])(.*)$') 

m = logrx.match(logdata) 
datestr = m.group(1) 
fields = m.group(2).split() 

print datestr 
for i, s in enumerate(fields): 
    print " ", i, s 

$ python log-parse.py 
Feb 26 14:20:04 
    0 laptop 
    1 kernel: 
    2 [19.392640] 
    3 ip_tables: 
    4 (C) 
    5 2000-2006 
    6 Netfilter 
    7 Core 
    8 Team