输出打印为

2024-09-25 16:31:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: 代码in脚本logfalseforif字典
2条回答

请尝试以下操作。它会给你很大的加速。对Python2.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())    

如果我误读了逻辑,不起作用,请评论。你知道吗

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

相关问题 更多 >