Функция findall возвращает все результаты вместо указанного в предложении IF в python - PullRequest
0 голосов
/ 16 апреля 2020
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

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете рассмотреть возможность использования with open для обработки файлов (вы не показываете, что делаете в своем коде). Затем вы можете расширить список для каждого дополнительного значения fr и tm. Использование extends, поскольку каждая итерация создает список только с одним значением, и вы, вероятно, не хотите перезаписывать и просто получать последнее значение.

Это то, что вы ищете (на основе ваши данные теста)?

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