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

问题描述 投票:-1回答:1
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的匹配项

python if-statement findall
1个回答
0
投票
您可能考虑使用with open进行文件处理(您未在代码中显示正在执行的操作)。然后,您可以为frtm的每个附加值扩展列表。使用扩展,因为每次迭代只会生成一个具有单个值的列表,并且您可能不希望过度写入而仅以最后一个值结束。

基于您的测试数据,您正在寻找类似的东西吗?

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']

© www.soinside.com 2019 - 2024. All rights reserved.