Python 输出打印速度慢
我正在写一个脚本,这部分代码使我的脚本输出打印速度变慢。我认为是嵌套循环导致了这个问题(这里使用了字典概念)。有没有其他方法可以让我的脚本在不等待的情况下打印结果Python 输出打印速度慢,python,python-2.7,python-3.x,ipython,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 +
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()
尝试以下方法。它会给你很大的速度。对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())
如果我误读了逻辑并且不起作用,请评论 cpanda的答案是好的,但是一个充满
的正则表达式是否是尝试所有正则表达式的最快方法并不明显。测试此备选方案的性能:
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())
在旁注中,这里介绍了如何使用干净的中断
编写当前代码,而不需要使用标志
:
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()
您在
Conf.items()
中所指的Conf
是什么?它的定义词典我认为您的第一个词典和我的词典实际上是等价的。我正在交替并提交给正则表达式引擎,这里python正在评估或
。这是我从比利那里学到的。:)@事实上,它们是等价的。我一开始就想表达出来。一个可能更快,我不知道是哪一个。你当然做了优化的重要部分。OP现在也了解了有价值的任何。罗杰。我的目的是简洁。@AlexHall Roger@C Panda,因为我在比较日志文件。你认为是日志文件的大小让它变慢了吗?也感谢你介绍了一些,我在代码中实现了它。@PukhrajSingh不。这不是一个因素,只要你使用迭代器(log
),而不是列表(log.splitlines()
)或一个大字符串(log.read()
)。如果文件为100MB,则每次在内存中处理一行文本。但这就是Python3.x,请检查Python2.x中的open
返回的内容。Python2中的文件也是惰性迭代器,这一点没有改变。