如何按时间读取日志文件并提取不包含日期信息的特定行

Inye Yu

我有一个日志文件,它的格式是这样的,

INFO    2018/11/20 18:56:00 aaaaaaaaaaaaaaaaaaaaaaaaaaaa
INFO    2018/11/20 18:56:00 bbbbbbbbbbbbbbbbbbbbbb
INFO    2018/11/20 18:56:00 cccccccccccccccccccccccccccc
INFO    2018/11/20 18:56:00 ddddddddddddddddddddddd
WARN    2018/11/20 18:56:23 Some Error Message
java.lang.IllegalArgumentException: blahblahblah
INFO    2018/11/20 19:01:23 eeeeeeeeeeeeeeeeeeeeeeeee

我不关心正常的日志,但我想提取包含“异常”字的行,该行应该在某个时间写入(例如在 18:00:00 和 18:59:59 之间。)我是怎么想的首先是在读取日志文件时使用 enumerate 函数获取索引。但是有了这个,我必须至少阅读文件三遍以上。并且 linecache 函数将文件中的每一行加载到内存中。有些文件超过 100MB,所以我知道这是个坏主意。

start = 0
end = 0
with open("filename", "f") as f:
    for idx, line in enumerate(f):
        if re.search("2018(\/|:|)11(\/|:|)20 18:\d{2}:\d{2}", line):
            start = idx
            break

    for idx, line in enumerate(f):
        if re.search("2018(\/|:|)11(\/|:|)20 19:\d{2}:\d{2}", line):
            end = idx - 1
            break    

for i in range(start, end):
    line = linecache.getline("filename", i)
    if 'Exception' in line:
        print line

最关键的问题是日志并不总是写在 xx:00m 或 xx:59m 上。例如,它将在 18:01:00 或 18:03:31 开始......

从昨天开始我就没有想出什么好主意。请帮助我.. 提前致谢。

eiram_mahera

您实际上不必循环文件 3 次。只需维护循环中的当前行和上一行。

from collections import OrderedDict
import re

result = OrderedDict()

with open("filename", "r") as f:
    prev, curr = None, None
    for id, line in enumerate(f):
        prev = curr
        curr = line
        if re.search('Exception', line):
            if re.search('18:\d{2}:\d{2}', prev):
                result[id] = line

print(result)

输出:

OrderedDict([(5, 'java.lang.IllegalArgumentException: blahblahblah\n')])

如果您希望从日志文件中获取所有 1 小时时段的行号,那么您只需要替换'18'一些变量即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Shell脚本逐行读取日志文件并提取时间戳和文件大小信息?

来自分类Dev

如何从包含时间戳的日志文件中获取日期值

来自分类Dev

在Perl中,如何过滤目录中的所有日志文件并提取有趣的行?

来自分类Dev

无法从日志文件中提取特定信息

来自分类Dev

读取CSV文件并提取特定数据

来自分类Dev

读取CSV文件并提取特定数据

来自分类Dev

如何在多行模式之间读取文件并提取数据?

来自分类Dev

Bash:如何使用bash脚本解析包含ls -ltr输出的日志文件,以提取在特定时间之前修改的文件名

来自分类Dev

按时间和日期提取连续比赛

来自分类Dev

如何使用列表(datetime.timedelta)中的循环特定日期并提取到不同的csv文件

来自分类Dev

按日期分组,而不按时间分组

来自分类Dev

从日志中提取特定信息

来自分类Dev

Python代码读取文件并提取数据

来自分类Dev

读取文件并提取到不同的输出

来自分类Dev

在Bash中,您将如何只读取超过特定时间戳的日志中的行?

来自分类Dev

假设只有最后一行会有不包含3个值的错误,我如何使用流提取运算符读取文件

来自分类Dev

按时间顺序创建一个包含所有以“ file_excel”开头的所有文件的串联信息的文件

来自分类Dev

如何读取文件的特定行?

来自分类Dev

如何按时间禁用当前日期?

来自分类Dev

从C中的文件读取一行并提取输入数

来自分类Dev

如何提取文本文件中的特定行以及包含特定字符串的多行?

来自分类Dev

如何从包含日期的多个文件中提取日期?

来自分类Dev

如何从日志文件中提取字符串(日期)

来自分类Dev

如何在特定的行上读取并提取以“ abc”开头并以“ def”结尾的字符串的一部分?

来自分类Dev

从日志文件获取特定信息

来自分类Dev

如何在日志文件中grep查找包含特定单词的行?

来自分类Dev

如何从最小到最大排序时间和日期,以便按时间顺序在PHP中提取数据?

来自分类Dev

使用grep和awk从日志文件中提取特定行

来自分类Dev

用正则表达式提取可能包含或不包含时间的日期

Related 相关文章

  1. 1

    如何使用Shell脚本逐行读取日志文件并提取时间戳和文件大小信息?

  2. 2

    如何从包含时间戳的日志文件中获取日期值

  3. 3

    在Perl中,如何过滤目录中的所有日志文件并提取有趣的行?

  4. 4

    无法从日志文件中提取特定信息

  5. 5

    读取CSV文件并提取特定数据

  6. 6

    读取CSV文件并提取特定数据

  7. 7

    如何在多行模式之间读取文件并提取数据?

  8. 8

    Bash:如何使用bash脚本解析包含ls -ltr输出的日志文件,以提取在特定时间之前修改的文件名

  9. 9

    按时间和日期提取连续比赛

  10. 10

    如何使用列表(datetime.timedelta)中的循环特定日期并提取到不同的csv文件

  11. 11

    按日期分组,而不按时间分组

  12. 12

    从日志中提取特定信息

  13. 13

    Python代码读取文件并提取数据

  14. 14

    读取文件并提取到不同的输出

  15. 15

    在Bash中,您将如何只读取超过特定时间戳的日志中的行?

  16. 16

    假设只有最后一行会有不包含3个值的错误,我如何使用流提取运算符读取文件

  17. 17

    按时间顺序创建一个包含所有以“ file_excel”开头的所有文件的串联信息的文件

  18. 18

    如何读取文件的特定行?

  19. 19

    如何按时间禁用当前日期?

  20. 20

    从C中的文件读取一行并提取输入数

  21. 21

    如何提取文本文件中的特定行以及包含特定字符串的多行?

  22. 22

    如何从包含日期的多个文件中提取日期?

  23. 23

    如何从日志文件中提取字符串(日期)

  24. 24

    如何在特定的行上读取并提取以“ abc”开头并以“ def”结尾的字符串的一部分?

  25. 25

    从日志文件获取特定信息

  26. 26

    如何在日志文件中grep查找包含特定单词的行?

  27. 27

    如何从最小到最大排序时间和日期,以便按时间顺序在PHP中提取数据?

  28. 28

    使用grep和awk从日志文件中提取特定行

  29. 29

    用正则表达式提取可能包含或不包含时间的日期

热门标签

归档