如何从日志文件中获取最后一个值

时间:2017-08-24 12:22:32

标签: python python-2.7 extract extraction logfile

我有一个日志文件,其中包含温度值 使用此代码,我只能从中提取温度值。

代码:

import re
import itertools

infile = "/home/pi/Mysensor/Logs/test.log"
for line in open(infile):
    match = re.search('Temp=(\d+)', line)
    if match:
        test = match.group(1)
        print test

我的日志文件:

2017-08-04 -> 16:14:29
Temp=28.0*  Humidity=36.0%

代码输出:

28
28
25
29
28
25

我想做的是,只提取最后四个结果 我试过数组和列表。但无法得到结果。

我在这里想念的是什么? 如何让这个程序只获得最后四个结果?

提前致谢。

4 个答案:

答案 0 :(得分:1)

您可以将温度保存在列表中,并使用切片获得最后4个:

import re
import itertools
temps = []
infile = "/home/pi/Mysensor/Logs/test.log"
for line in open(infile):
    match = re.search('Temp=(\d+)', line)
    if match:
      test = match.group(1)
      temps.append(test)
print temps[:-5:-1]

要了解有关切片的更多信息,请see this post

答案 1 :(得分:1)

我想这实际上取决于您的日志文件有多大,但我可以通过几种方式来实现它。

最简单的可能是使用deque

from collections import deque
import re

temps = deque(maxlen=4)

infile = "/home/pi/Mysensor/Logs/test.log"
with open(infile, "r") as fh:
    for line in fh:
        match = re.search('Temp=(\d+)', line)
        if match:
            temp = match.group(1)
            temps.append(temp)

答案 2 :(得分:1)

一种简单的方法是使用linux shell中的tail

  1 import os
  2 
  3 def my_tail(f, n):
  4     stdin, stdout = os.popen2("tail -n " + str(n) + " "+ f)
  5     lines = stdout.readlines();
  6     return lines
  7     
  8 print my_tail("./my_log.txt",4)

答案 3 :(得分:0)

如果你可以,如果其他语言也可以这样做,你可以在bash shell中使用以下命令(假设日志文件名是stack.log ):

grep' Temp' stack.log |尾巴-4 | gawk -F =' {print $ 2}' | gawk' {print $ 1}' | sed s / * // g

打破上述命令:

  1. grep' Temp' stack.log - >搜索" Temp"给定日志文件中的字符串。
  2. tail -4 - >将从上面的命令输出中提取最后4条记录。
  3. gawk -F =' {print $ 2}' - >用" ="作为分隔符并打印第一列, 例如 : 29.0 *湿度 21.0 *湿度 22.0 *湿度 28.0 *湿度

  4. gawk' {print $ 1}' - >使用"空间"作为分隔符并打印第一列 单独,例如: 29.0 *

    21.0 *

    22.0 *

    28.0 *

  5. sed s / // g - >替换所有" " (星号)空白"" (空白)。

  6. 最终输出如下:

    29.0

    21.0

    22.0

    28.0

    您可以将其重定向到文件,并将程序作为温度读取。