在python中分隔字段

在python中分隔字段,python,syslog,Python,Syslog,我有Linux/Unix系统日志文件,我想将日期和时间分离成变量。如何在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”“-f1-4来完成,其中“是分隔符,1-4是字段号 谢谢 如果您只是想模拟cut,您可以在

我有Linux/Unix系统日志文件,我想将日期和时间分离成变量。如何在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”“-f1-4
来完成,其中
是分隔符,
1-4
是字段号


谢谢

如果您只是想模拟
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个字段吗?)


您也可以使用regex,但我认为在这种情况下没有必要使用它。

如果您只是想模拟
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个字段吗?)


您也可以使用regex,但我认为在这种情况下没有必要使用它。

我认为您的目标有点低。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

我觉得你的目标有点低。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