datetime - python从日志文件中提取日期?

我正在尝试从日志文件示例字符串中创建DateTime对象,

未定义测试字符串为'ERROR 2019-02-03 T23:21:20 cannot find file"',


def convert_to_datetime(line):


 match = re.search('d{4}-d{2}-d{2}', line)



我正在努力从字符串中获得完整的日期, 我试过几个正规表达式,但是,我认为我使用的语法不正确。

时间:

不确定你是否想要这个,但是,如果你的字符串是一种自由风格,从字符串生成一个datetime对象可能会非常复杂。但是,我们有 dateutil软件包可帮助你:


>>> import dateutil.parser


>>> s = 'ERROR 2019-02-03T23:21:20 cannot find file'


>>> dateutil.parser.parse(s, fuzzy=True)


datetime.datetime(2019, 2, 3, 23, 21, 20)



如果你喜欢,这就是函数:


def convert_to_datetime(s):


 return dateutil.parser.parse(s, fuzzy=True)



你只需要得到结果:


def convert_to_datetime(line):


 match = re.search('d{4}-d{2}-d{2}', line)


 return match.group() if match else"No match"



测试:


t = convert_to_datetime('ERROR 2019-02-03T23:21:20 cannot find file')


print(t)



输出:

 
2019-02-03



 

首先在读取 https://docs.python.org/3/library/re.html之后,要小心于 python 3中的 d,并不是完全等价于[0-9],然后如果没有匹配的pattern.match会引发错误,请小心,


pattern = re.compile('[0-9]{4}-[0-9]{2}-[0-9]{2}')



if pattern.search(line):


 matches.append(pattern.search(line))


...




你需要打印你所匹配的群组,


import re



s = 'ERROR 2019-02-03T23:21:20 cannot find file'


match = re.search('d{4}-d{2}-d{2}', s)


print(match.group(0))


#2019-02-03



如果要获取整个日期时间字符串,则可以执行以下操作,


import re


s = 'ERROR 2019-02-03T23:21:20 cannot find file'


match = re.search('d{4}-d{2}-d{2}Td{2}:d{2}:d{2}', s)


print(match.group(0))


#2019-02-03T23:21:20



在此之后如果你想获得datetime对象你可以使用 https://pypi.org/project/python-dateutil/ 库,


from dateutil import parser


import re



s = 'ERROR 2019-02-03T23:21:20 cannot find file'


match = re.search('d{4}-d{2}-d{2}Td{2}:d{2}:d{2}', s)



#Datetime string


dt = match.group(0)



#Datetime object


dt_obj = parser.parse(dt)


print(dt_obj)


#2019-02-03 23:21:20



print(type(dt_obj))


#<class 'datetime.datetime'>



或者最佳解决方案,使用上面定义的parser 函数和 fuzzy=True


from dateutil import parser



s = 'ERROR 2019-02-03T23:21:20 cannot find file'


print(parser.parse(s, fuzzy=True))


#2019-02-03 23:21:20



...