我有一个日志文件,其中包含温度值 使用此代码,我只能从中提取温度值。
代码:
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
我想做的是,只提取最后四个结果 我试过数组和列表。但无法得到结果。
我在这里想念的是什么? 如何让这个程序只获得最后四个结果?
提前致谢。
答案 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
打破上述命令:
gawk -F =' {print $ 2}' - >用" ="作为分隔符并打印第一列, 例如 : 29.0 *湿度 21.0 *湿度 22.0 *湿度 28.0 *湿度
gawk' {print $ 1}' - >使用"空间"作为分隔符并打印第一列 单独,例如: 29.0 *
21.0 *
22.0 *
28.0 *
sed s / // g - >替换所有" " (星号)空白"" (空白)。
最终输出如下:
29.0
21.0
22.0
28.0
您可以将其重定向到文件,并将程序作为温度读取。