gpt4 book ai didi

python - 从列表中提取时间值并添加到新列表或数组

转载 作者:行者123 更新时间:2023-12-01 06:28:38 24 4
gpt4 key购买 nike

我有一个脚本,可以读取包含数百个此类日志的日志文件,并查找具有“打开、关闭或切换”类型的日志。然后我将每个日志输出到它自己的列表中。我试图找到一种方法将 Out 和 In 时间提取到单独的列表/数组中,然后减去两个时间以找到每个单独日志的持续时间。输出的日志如下所示:

['2020-01-31T12:04:57.976Z 1234 Out: [2020-01-31T00:30:20.150Z] Id: {"Id":"4-f-4-9-6a"', '"Type":"Switch"', '"In":"2020-01-31T00:30:20.140Z"']

这是我当前的代码:

logfile = '/path/to/my/logfile'

with open(logfile, 'r') as f:
text = f.read()
words = ["On", "Off", "Switch"]
text2 = text.split('\n')
for l in text.split('\n'):
if (words[0] in l or words[1] in l or words[2] in l):
log = l.split(',')[0:3]

我陷入了如何仅定位日志中的出时间和入时间值并将它们放入数组中并转换为时间值以查找持续时间的问题。

脚本之前的初始日志:“In”时间之后的所有内容对于我要查找的内容都是无用的,因此我只输出前三个索引

2020-01-31T12:04:57.976Z 1234 Out: [2020-01-31T00:30:20.150Z] Id: {"Id":"4-f-4-9-6a","Type":"Switch,"In":"2020-01-31T00:30:20.140Z","Path":"interface","message":"interface changed status from unknown to normal","severity":"INFORMATIONAL","display":true,"json_map":"{\"severity\":null,\"eventId\":\"65e-64d9-45-ab62-8ef98ac5e60d\",\"componentPath\":\"interface_css\",\"displayToGui\":false,\"originalState\":\"unknown\",\"closed\":false,\"eventType\":\"InterfaceStateChange\",\"time\":\"2019-04-18T07:04:32.747Z\",\"json_map\":null,\"message\":\"interface_css changed status from unknown to normal\",\"newState\":\"normal\",\"info\":\"Event created with current status\"}","closed":false,"info":"Event created with current status","originalState":"unknown","newState":"normal"}

最佳答案

下面是一个可能的解决方案。 wordmatch 行有点像黑客,直到我找到更清晰的东西:它只是一个单行代码,创建一个空或 1 元素集 True 如果满足以下条件之一单词匹配。(未经测试)

import re

logfile = '/path/to/my/logfile'

words = ["On", "Off", "Switch"]
dateformat = r'\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}\.\d+[Zz]?'
pattern = fr'Out:\s*\[(?P<out>{dateformat})\].*In":\s*\"(?P<in>{dateformat})\"'
regex = re.compile(pattern)
with open(logfile, 'r') as f:
for line in f:
wordmatch = set(filter(None, (word in s for word in words)))
if wordmatch:
match = regex.search(line)
if match:
intime = match.group('in')
outtime = match.group('out')
# whatever to store these strings, e.g., append to list or insert in a dict.

如上所述,您的日志示例非常尴尬,因此这适用于示例行,但可能不适用于每一行。根据需要进行调整。

我也没有包含(如果需要的话)到 datetime.datetime 对象的转换。为此,请通读 datetime 模块文档,特别是 datetime.strptime。 (或者,您可能希望将结果存储在 Pandas 表中。在这种情况下,请通读 Pandas 文档,了解如何将字符串转换为实际的日期时间对象。)

您也不需要自己阅读换行符上的 nad split:for line in f 将为您执行此操作(前提是 f 确实是一个文件句柄)。

关于python - 从列表中提取时间值并添加到新列表或数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60010186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com