findall 函数 return 所有结果而不是 python 中 IF 子句中指定的结果

findall function return all results instead the one specified in in IF clause in python

Here is my code

def ExtractTimeAndFrequency():

for line in ft.split('\r\n'):
    if 'cpu7' in line:
        tm = re.findall(r"([0-2][0-9]:[0-5][0-9]:[0-5][0-9])", line)
        fr= re.findall(r"\d{7}", line)
return fr, tm

文件内容在这里:

15:23:48 cpu0 1708800
15:23:48 cpu1 1708801
15:23:48 cpu2 1708802
15:23:48 cpu3 1708803
15:23:48 cpu4 1708804
15:23:49 cpu5 1708805
15:23:49 cpu6 2208006
15:23:49 cpu7 2208007
15:23:49 Temp 326

15:23:52 cpu0 1708808
15:23:52 cpu1 1708809
15:23:52 cpu2 1708810
15:23:52 cpu3 1708811
15:23:52 cpu4 1708812
15:23:52 cpu5 1708813
15:23:52 cpu6 2208014
15:23:52 cpu7 2208015
15:23:53 Temp 327

我应该只获取 cpu7 的匹配项,但我获取了从 cpu0 到 cpu7 的所有匹配项

您可以考虑使用 with open 进行文件处理(您不会在代码中显示您在做什么)。然后,您可以为 frtm 的每个附加值扩展一个列表。使用 extend 是因为每次迭代只生成一个包含单个值的列表,您可能不想覆盖并以最后一个值结束。

您正在寻找这样的东西吗(根据您的测试数据)?

import re


def ExtractCpuAndFrequency():
    with open('../testData/so1.txt') as text_file:
        for line in text_file:
            if 'cpu7' in line:
                tm.extend(re.findall(r"([0-2][0-9]:[0-5][0-9]:[0-5][0-9])", line))
                fr.extend(re.findall(r"\d{7}", line))
    return fr, tm


tm = []
fr = []
result_fr, result_tm = ExtractCpuAndFrequency()

print(f'Result fr is {result_fr}')
print(f'Result tm is {result_tm}')

包含 "cpu7" 行中的两个值的结果:

Result fr is ['2208007', '2208015']
Result tm is ['15:23:49', '15:23:52']