Python 从日志文件中提取日期?
我正在尝试从日志文件示例字符串创建DateTime对象 我一直在尝试使用正则表达式来解析它,但每当我使用日志文件的格式时,它就失败了,在后半段的时间里,日志文件中有一个串联字母“T”。我的测试字符串是“错误2019-02-03T23:21:20找不到文件”Python 从日志文件中提取日期?,python,datetime,Python,Datetime,我正在尝试从日志文件示例字符串创建DateTime对象 我一直在尝试使用正则表达式来解析它,但每当我使用日志文件的格式时,它就失败了,在后半段的时间里,日志文件中有一个串联字母“T”。我的测试字符串是“错误2019-02-03T23:21:20找不到文件” def convert_to_datetime(行): match=re.search('\d{4}-\d{2}-\d{2}',行) 我正努力从字符串中找出完整的日期。我尝试了几个正则表达式,但我认为我使用了错误的语法。您也需要打印匹配的组
def convert_to_datetime(行):
match=re.search('\d{4}-\d{2}-\d{2}',行)
我正努力从字符串中找出完整的日期。我尝试了几个正则表达式,但我认为我使用了错误的语法。您也需要打印匹配的组
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
另外,如果您想获得整个datetime字符串,您可以这样做
import re
s = 'ERROR 2019-02-03T23:21:20 cannot find file'
match = re.search('\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}', s)
print(match.group(0))
#2019-02-03T23:21:20
在此之后,如果要获取datetime对象,可以使用库
你的结束。您只需获得以下结果:
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
输出:
t = convert_to_datetime('ERROR 2019-02-03T23:21:20 cannot find file')
print(t)
2019-02-03
首先,阅读后要小心,Python 3中的\d
并不完全等同于[0-9]
,
那么,
如果没有匹配的模式,请小心。匹配将引发错误
试试像这样的东西
pattern=re.compile('[0-9]{4}-[0-9]{2}-[0-9]{2}')
如果模式。搜索(行):
匹配。追加(模式。搜索(行))
...
不确定是否需要,但如果字符串是自由样式,则从字符串生成日期时间对象可能非常复杂。但我们有一揽子计划可以帮助:
>>> 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)
根据最终字符串的格式,有两种方法可以实现这一点:
import re
def convert_to_datetime(line: str):
match = re.search('\d{4}-\d{2}-\d{2}', line.strip('T')).group()
match += ' | ' + re.search('\d{2}:\d{2}:\d{2}', line).group()
return match
def cut_out_datetime(line: str):
line = re.sub('ERROR ', "", line)
line = re.sub('T', " | ", line)
return line
s = 'ERROR 2019-02-03T23:21:20'
print(' Test string: ', s)
print()
print('Extract method: ', convert_to_datetime(s))
print(' "Trim" method: ', cut_out_datetime(s))
# OUTPUT:
Test string: ERROR 2019-02-03T23:21:20
Extract method: 2019-02-03 | 23:21:20
"Trim" method: 2019-02-03 | 23:21:20
[Done] exited with code=0 in 0.05 seconds
位置和切片还有其他方法,但这与原始代码最为相似。根据需要替换|或将时间和日期分成两个单独的字符串 打印(match.group(),如果匹配,否则为“不匹配”)
在match
之后,如果答案对您有帮助,那太好了!请投赞成票并接受它:)我从未注意到这一点。我们需要研究错误处理,感谢您指出@sslloo