我试图在Python中解析一个日志文件,该文件包含数千行代码:
RAM 2822/3956 0MB(LFB106x4MB)交换107/1978MB (缓存0MB) IRAM 0/252 0MB(LFB252kB) CPU 24%@102,23%@204,关闭EMC_FREQ 3%@1600 VIC_FREQ 0%@76 VIC_FREQ 0%@140 APE 25 PLL@30C CPU@32 C PMIC@100 C GPU@31C AO@42.5C热@31.5C POM_5V_IN 2000/38 POM_5V_CPU 115/115
其中需要提取POM_5V_IN和POM_5V_CPU的值,分别为2000/2000和115/115。下面是我的代码,但是它不返回这些值。可能,我漏掉了一些使用regex语法的东西。
import re
newFile = open('datasets/consum_amt.log','r')
for line in newFile.readlines():
if ('POM_5V_IN' in line):
P_in = re.compile(r'\{\"POM_5V_IN\" (0-9)\}')#parse POM IN
else if ('POM_5V_CPU' in line):
P_cpu = re.compile(r'\{\"POM_5V_CPU\" (0-9)\}')#parse POM CPU发布于 2021-03-02 15:57:40
这有用吗?
str1 = "RAM 2822/3956MB (lfb 106x4MB) SWAP 107/1978MB (cached 0MB) IRAM 0/252kB(lfb 252kB) CPU [24%@102,23%@204,off,off] EMC_FREQ 3%@1600 GR3D_FREQ 0%@76 VIC_FREQ 0%@140 APE 25 PLL@30C CPU@32C PMIC@100C GPU@31C AO@42.5C thermal@31.5C POM_5V_IN 2000/2000 POM_5V_GPU 38/38 POM_5V_CPU 115/115"
ind1a = str.find(str1, "POM_5V_IN", 0)
ind1b = str.find(str1, "POM_5V_GPU",0)
P_in = str1[ind1a+10, ind1b] #Offsetting for length of "POM_5V_IN", could of course do that programmatically if you wanted
ind2 = str.find(str1, "POM_5V_CPU", 0)
P_cpu = str1[ind2+11:] #Same offsetting as above它依赖于POM_5V_IN值被字符串"POM_5V_GPU“跟踪,而POM_5V_CPU是字符串的最后一个条目,所以如果不是这样的话,就需要做一些工作。
发布于 2021-03-02 15:58:53
考虑到line为:
line = "RAM 2822/3956MB (lfb 106x4MB) SWAP 107/1978MB (cached 0MB) IRAM 0/252kB(lfb 252kB) CPU [24%@102,23%@204,off,off] EMC_FREQ 3%@1600 GR3D_FREQ 0%@76 VIC_FREQ 0%@140 APE 25 PLL@30C CPU@32C PMIC@100C GPU@31C AO@42.5C thermal@31.5C POM_5V_IN 2000/2000 POM_5V_GPU 38/38 POM_5V_CPU 115/115"您可以对多个捕获组使用一个regex,如下所示:
import re
regex = re.compile(r"POM_5V_IN\s(?P<IN>[0-9]+/[0-9]+)\s.*POM_5V_CPU\s(?P<CPU>[0-9]+/[0-9]+)")您可以像这样访问结果:
>>> regex.search(line).group('IN')
'2000/2000'
>>> regex.search(line).group('CPU')
'115/115'捕获组的名称位于正则表达式中的<和>之间。您可以使用正则表达式这里。
发布于 2021-03-02 16:03:37
下面是一个应该有效的例子。
备注:
else if在python中也是elif。你的例子很接近。在用re.compile编译正则表达式之后,然后使用re.match()或re.search()调用它。
import re
newFile = open('datasets/consum_amt.log','r')
P_in = re.compile(r'POM_5V_IN (\d+[/]\d+)')#parse POM IN
P_cpu = re.compile(r'POM_5V_CPU (\d+[/]\d+)')#parse POM CPU
for line in newFile.readlines():
found_in = P_in.search(line)
if found_in:
print(found_in.groups()[0])
found_cpu = P_cpu.search(line)
if found_cpu:
print(found_cpu.groups()[0])https://stackoverflow.com/questions/66442168
复制相似问题