当前,我正在循环浏览目录,以查找/存储/显示包含版本号信息的最新日志行。我正在使用Regex查找带有版本号的日志行,并且试图通过将它们与parse_version进行比较来查找具有最新时间戳的日志行。
例如,我的文件夹文件中的日志行如下所示:
2018-05-08T15:47:27.752Z 00000000-0000-0000-0000-000000000000 > LVL:2 RC: version: 2.12.1.10452
2018-05-08T21:27:14.2049217Z> <INFO >: Version: 2.10.0.23960
2018-05-08T21:18:53.0428568Z> <INFO >: Version: 2.12.1.26051
这些只是我的文件夹文件中成千上万行日志的几个示例,我正在尝试查找包含有关版本号的信息的最新日志行。在这种情况下,我希望选择第二行,即使它的版本号较低,因为它具有更新的时间戳。
下面是我的代码,为简单起见,我没有包括遍历文件夹的代码。
for line in f: #For simplicity sake, I won't include my code above this line because it's just for looping through the folder to find the log lines
#0strip out \x00 from read content, in case it's encoded differently
line = line.replace('\x00', '')
#Regular expressions for finding the log lines in the folder
RE2 = r"^.+INFO.+Version.+"
RE3 = r"^.+RC: version"
previous_version_line = '0'
version_to_display = '00'
#Find the general matches, and get the version line with the latest time stamp
pattern2 = re.compile('('+RE2+'|'+RE3+')', re.IGNORECASE)
for match2 in pattern2.finditer(line):
if parse_version(line) > parse_version(previous_version_line):
version_to_display = line
previous_version_line = line
else:
version_to_display = previous_version_line
print(version_to_display)
现在,问题似乎出在parse_version比较中,尽管通过正则表达式找到的日志行的值应大于0,但if语句始终求值为false,而我只是打印一堆0。 / p>
谢谢!
答案 0 :(得分:0)
找到其中包含“版本”的每一行,按时间对其进行排序,并在日志消息中显示最新时间:
data = """
2018-05-08T15:47:27.752Z 00000000-0000-0000-0000-000000000000 > LVL:2 RC: version: 2.12.1.10452
2018-05-08T21:27:14.2049217Z> <INFO >: Version: 2.10.0.23960
2018-05-08T21:18:53.0428568Z> <INFO >: Version: 2.12.1.26051
"""
import re
from datetime import datetime
data_new = []
for (d, log) in re.findall(r'([\d\-:T\.]+Z)>?\s+(.*)', data):
if not re.search('version', log, flags=re.I):
continue
parts = d.split('.')
if len(parts[1]) >= 8:
d = parts[0] + '.' + parts[1][:6] + 'Z'
data_new.append((datetime.strptime(d, '%Y-%m-%dT%H:%M:%S.%fZ'), log))
data_new = sorted(data_new, reverse=True)
if data_new:
t = data_new[0][0].strftime('%Y-%m-%dT%H:%M:%S.%fZ')
print(f'Latest version to display:\ntime=[{t}] msg=[{data_new[0][1]}]')
打印:
Latest version to display:
time=[2018-05-08T21:27:14.204921Z] msg=[<INFO >: Version: 2.10.0.23960]
注意事项:
Python datetime
类仅接受6位数的微秒(因此该程序将其截断)。