在python中分隔字段

时间:2012-03-08 23:50:18

标签: python syslog

我有Linux / Unix syslog文件,我想将日期和时间分成变量。我怎样才能在python中实现它?

这是日志格式:

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

我想将Feb放在一个变量中,同样适用于第26天,时间(14:20:04)等等。

在shell脚本中,我可以cut -d " " -f 1-4执行此操作,其中" "是分隔符,1-4是字段编号。

谢谢!

2 个答案:

答案 0 :(得分: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个字段吗?)

您也可以使用正则表达式,但我不认为在这种情况下是必要的。

答案 1 :(得分: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
相关问题