我正在编写一个脚本,这部分代码正在使我的脚本输出打印速度慢。我认为它是导致问题的嵌套循环(使用字典概念)。有没有其他方法可以让我的脚本打印结果而无需等待它。
Log = open("file.txt")
for LogLine in Log:
flag = True
for key, ConfLine in Conf.items():
for patterns in ConfLine:
patterns = DateString + patterns
if re.match(patterns, LogLine):
flag = False
break
if(flag == False):
break
if(flag):
print LogLine.strip()
答案 0 :(得分:1)
尝试以下方法。它会给你很多加速。对Python 2.x应用适当的更改
pats = (date_string+pat for conf in Conf.values() for pat in conf)
master_pat = re.compile('|'.join(pats))
with open('file.txt') as log:
for line in log:
if master_pat.match(line):
print(line.strip())
如果我误读了逻辑并且无法正常工作,请发表评论。
答案 1 :(得分:1)
|
的正则表达式是尝试所有正则表达式的最快方法并不明显。测试此替代方案的性能:
pats = [re.compile(date_string+pat) for conf in Conf.values() for pat in conf]
with open('file.txt') as log:
for line in log:
if any(pat.match(line) for pat in pats):
print(line.strip())
另外,以下是使用干净的break
编写当前代码的方法,而不需要flag
:
for ConfLine, patterns in ((c, p) for c in Conf.values() for p in c):
patterns = DateString + patterns
if re.match(patterns, LogLine):
break
else:
print LogLine.strip()