我如何只解析字符串中的时间戳

时间:2014-04-25 22:15:51

标签: python timestamp

我试图使用python解析日志文件中特定行的时间戳。这是文件中的一行:

  

Mar 29 06:12:42 10.11.100.22 [info.events] [警告] 10.11.100.22:   事件,1234

我如何只从中获取时间戳?这是我正在使用的代码,它从文件中找到包含“WARNING”字样的行,然后获取时间戳。

def is_Warning(self,line):
    if line.find("WARNING") >= 0:
        ts = time.strptime(line, "%b %d %H:%M:%S")
        print "==================== %s" % ts

当我运行时,我得到一个'ValueError:未转换的数据仍然存在:10.11.100.22 [info.events] [警告] 10.11.100.22:event,1234'

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

使用Regex。

import re

...

def is_warning(self,line):
    if line.find("WARNING") >= 0:
        date = re.match(r"[A-Za-z]{3} \d{1,2} \d{2}:\d{2}:\d{2}",line).group()
        ts = time.strptime(date, "%b %d %H:%M:%S")
        print("===================== %s" % ts

请注意time是一个非常古老的模块。如果你需要时间,你应该使用datetime.datetime.strptime(date, format).time()

答案 1 :(得分:1)

strptime应匹配整个字符串而不仅仅是开头。既然你知道了行的长度,你可以这样做:

    ts = time.strptime(line[:15].strip(), "%b %d %H:%M:%S")

[:15]方法只返回字符串中的前15个字符,这是您需要的唯一字符。