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
进行文件处理(您不会在代码中显示您在做什么)。然后,您可以为 fr
和 tm
的每个附加值扩展一个列表。使用 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']
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
进行文件处理(您不会在代码中显示您在做什么)。然后,您可以为 fr
和 tm
的每个附加值扩展一个列表。使用 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']