读取日志文件并只打印第一个匹配
问题描述:
我可能会在这里错误的方向寻找一些帮助。读取日志文件并只打印第一个匹配
基本上现在,我有一个脚本,打开一个日志文件,并挑出任何符合值的行。用这些行,我然后检查是否找到了字典中的一个键,然后打印该行。 我不想让它打印每一行,只要它匹配一次。
到目前为止,我有这个,但似乎无法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
循环
任何帮助,将不胜感激
干杯!
答
由于没有什么FileReadBackwards
是知识...
- 你可以只保留见过阶段的
set
。 -
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
在世界上什么是'FileReadBackwards'? –
我正在使用[this](https://pypi.python.org/pypi/file-read-backwards) – Kev