我正在尝试使用Python的正则表达式从日志文件中获取值,在这个过程中我有几个if
语句。抓取值的代码部分如下:
# Opening the log file for reading
with open(logFile, 'r') as logfile_read:
for line in logfile_read:
line = line.rstrip()
# To extract Time or iteration
if 'Time' in line:
iteration_time = re.findall(r'^Time\s+=\s+(.*)', line)
# To extract local, global and cumulative values
if 'local' in line:
local_global_cumu = re.search(r'sum\s+local\s+=\s+(.*),\s+global\s+=\s+(.*),\s+cumulative\s+=\s+(.*)', line)
if local_global_cumu:
contLocal_0_value = local_global_cumu.group(1)
contGlobal_0_value = local_global_cumu.group(2)
contCumulative_0_value = local_global_cumu.group(3)
for t in iteration_time:
contLocal.write("%s\t%s\n" %(t, contLocal_0_value))
contGlobal.write("%s\t%s\n" %(t, contGlobal_0_value))
contCumulative.write("%s\t%s\n" %(t, contCumulative_0_value))
# To extract execution and cpu time
if 'ExecutionTime' in line:
execution_cpu_time = re.search(r'^ExecutionTime\s+=\s+(.*)\s+s\s+ClockTime\s+=\s+(.*)\s+s', line)
if execution_cpu_time:
execution_time_0_value = execution_cpu_time.group(1)
cpu_time_0_value = execution_cpu_time.group(2)
for t in iteration_time:
print t
在第二个if
语句中,我可以获得t
的值。但是,在随后的if
语句中,当我尝试print t
时,什么都没有。我不知道我哪里出错了。
答案 0 :(得分:1)
以下检查是否"时间"是该行中的子字符串,然后尝试在"时间" ...
上找到该行开始的所有匹配项if 'Time' in line:
iteration_time = re.findall(r'^Time\s+=\s+(.*)', line)
以下还包含单词" Time":
if 'ExecutionTime' in line:
execution_cpu_time = re.search(r'^ExecutionTime\s+=\s+(.*)\s+s\s+ClockTime\s+=\s+(.*)\s+s', line)
当它试图循环iteration_time
时,它将为空,因为前一个if
已经运行,并且条件是它开始于"时间"意味着你得到一个匹配的空列表。
让我们假装你只有一行,从" ExecutionTime"开始,让我们来看看......
if 'Time' in line
为真,因此re.findall
会运行并返回以开头的行的所有匹配项'时间' ...这将是为空,因为行没有以'时间' 开头 - 所以iteration_time = []
if 'ExecutionTime' in line
为真, 行以' ExecutionTime'开头,当您执行for t in iteration_time
时 - 它不会循环,因为上面已经将它设置为空!