我试图使用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'
有人可以帮忙吗?
答案 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个字符,这是您需要的唯一字符。