gpt4 book ai didi

python - 使用Python解析日期时间范围之间的日志

转载 作者:行者123 更新时间:2023-12-01 07:57:59 24 4
gpt4 key购买 nike

我正在尝试创建一个动态函数:我给出两个日期时间值,它可以读取这些日期时间值之间的日志,例如:

    start_point = "2019-04-25 09:30:46.781"
stop_point = "2019-04-25 10:15:49.109"

我正在考虑检查的算法:

  1. 如果日期相等:
    • 检查开始时间 0 字符 (09 -> 0) 是否高于或小于停止时间 0 字符 (10 -> 1);
    • 对小时 1 字符进行相同的检查((开始)09 -> 9,(停止)10 -> 0);
    • 与分钟 0 字符相同的检查;
    • 与分钟 1 字符相同的检查;
  2. 如果日期不同:
    • 一些其他检查...

我不知道我是不是又发明了一个轮子,但我真的迷路了,我会列出我尝试过的东西:

1.

    ...
cmd = subprocess.Popen(['egrep "2019-04-19 ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]{3}" file.log'], shell=True, stdout=subprocess.PIPE)
cmd_result = cmd.communicate()[0]
for i in str(cmd_result).split("\n"):
print(i)
...

这个问题:我添加了示例中的值,但它无法工作,因为它具有无效范围,例如小时 1 字符,它创建范围 [9-0]、分钟字符 0 [3-1 ]等

2.尝试了 The best way to filter a log by a dates range in python 中的以下解决方案

感谢任何帮助。

编辑

日志行结构:

    ...
2019-04-25 09:30:46.781 text text text ...
2019-04-25 09:30:46.853 text text text ...
...

编辑2

所以我尝试了代码:

from datetime import datetime as dt

s1 = "2019-04-25 09:34:11.057"
s2 = "2019-04-25 09:59:43.534"

start = dt.strptime('2019-04-25 09:34:11.057','%Y-%m-%d %H:%M:%S.%f')
stop = dt.strptime('2019-04-25 09:59:43.534', '%Y-%m-%d %H:%M:%S.%f')

start_1 = dt.strptime('09:34:11.057','%H:%M:%S.%f')
stop_1 = dt.strptime('09:59:43.534','%H:%M:%S.%f')

with open('file.out','r') as file:
for line in file:
ts = dt.strptime(line.split()[1],'%H:%M:%S.%f')
if (ts > start_1) and (ts < stop_1):
print line

我得到了错误

ValueError: time data 'Platform' does not match format '%H:%M:%S.%f'

所以看来我发现了另一个问题,它有时在行开始处包含非日期时间。有没有办法提供一个正则表达式来提供日期时间格式?

编辑3

修复了当字符串出现在行开头时导致 ValueError 的问题,并修复了可能出现其他值时的索引超出范围错误:

try:
ts = dt.strptime(line.split()[1],'%H:%M:%S.%f')
if (ts > start_1) and (ts < stop_1):
print line
except IndexError as err:
continue
except ValueError as err:
continue

所以现在它列出的不在我提供的范围内,现在它读取日志从2019-02-27 09:38:46.2292019-02-28 09:57:11.028。有什么想法吗?

最佳答案

您的编辑 2 的想法是正确的。您需要进行异常处理以捕获格式不正确的行并跳过它们,例如空白行或没有时间戳的行。这可以按如下方式完成:

from datetime import datetime

s1 = "2019-04-25 09:24:11.057"
s2 = "2019-04-25 09:59:43.534"

fmt = '%Y-%m-%d %H:%M:%S.%f'

start = datetime.strptime(s1, fmt)
stop = datetime.strptime(s2, fmt)


with open('file.out', 'r') as file:
for line in file:
line = line.strip()

try:
ts = datetime.strptime(' '.join(line.split(' ', maxsplit=2)[:2]), fmt)

if start <= ts <= stop:
print(line)

except:
pass

整个时间戳用于创建ts,这样可以正确地与startstop进行比较。

每行首先删除尾随的换行符。然后它被分割成最多两次的空格。然后,前两个分割重新连接在一起并转换为 datetime 对象。如果失败,则意味着您没有正确格式化的行。

关于python - 使用Python解析日期时间范围之间的日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55867124/

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