输出打印很慢

时间:2016-05-12 16:54:26

标签: python python-2.7 python-3.x ipython

我正在编写一个脚本,这部分代码正在使我的脚本输出打印速度慢。我认为它是导致问题的嵌套循环(使用字典概念)。有没有其他方法可以让我的脚本打印结果而无需等待它。

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()

2 个答案:

答案 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)

C Panda的答案很好,但是充满|的正则表达式是尝试所有正则表达式的最快方法并不明显。测试此替代方案的性能:

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()