2017-09-06 74 views
0

我可能会在这里错误的方向寻找一些帮助。读取日志文件并只打印第一个匹配

基本上现在,我有一个脚本,打开一个日志文件,并挑出任何符合值的行。用这些行,我然后检查是否找到了字典中的一个键,然后打印该行。 我不想让它打印每一行,只要它匹配一次。

到目前为止,我有这个,但似乎无法break为了只显示一个匹配

在这个例子中,我syslog文件是:

PHASE 1 
PHASE 2 
PHASE 2 

代码:

phase_dict = { 
"PHASE 1": "Phase 1 completed successfully: ", 
"PHASE 2": "Phase 2 completed successfully: ", 
} 

with FileReadBackwards('syslog', encoding="utf-8") as frb: 
    for line in frb: 
     if re.findall('first_match', line): 
      for key,value in phase_dict.iteritems(): 
       if re.search(key, line): 
        print value + line.rstrip() 

我的输出显示:

Phase 2 completed successfully: PHASE 2 
Phase 2 completed successfully: PHASE 2 
Phase 1 completed successfully: PHASE 1 

我试图让它只显示每个匹配。

预期输出:

Phase 2 completed successfully: PHASE 2 
Phase 1 completed successfully: PHASE 1 

我不知道如果我要下去的最佳路线翻翻字典,去和使用for循环

任何帮助,将不胜感激

干杯!

+0

在世界上什么是'FileReadBackwards'? –

+0

我正在使用[this](https://pypi.python.org/pypi/file-read-backwards) – Kev

回答

2

由于没有什么FileReadBackwards是知识...

  1. 你可以只保留见过阶段的set
  2. dict ionaries支持随机访问,所以不需要遍历它们,更不用在它们上使用正则表达式。

seen = set() 
with FileReadBackwards('syslog', encoding="utf-8") as frb: 
    for line in frb: 
     line = line.strip() 
     if line not in seen and line in phase_dict: 
      seen.add(line) 
      print phase_dict[line] + line 
相关问题