【发布时间】:2015-07-15 20:43:40
【问题描述】:
我有非常大的文本文件(大约 150 万行或更多行)来解析一些信息。我所做的每一行都会检查某些关键字(我称它们为“标志”)。
但是,我为每一行运行了数十次检查,因此我的程序需要相当长的时间才能完成。有没有更快的方法来检查我目前的检查方式?下面只是我正在做的一个例子:
nameFound = false
ageFound = false
for line in file:
if not nameFound and line.find('name:') != -1:
do something
elif not ageFound and line.find('age:') != -1:
do something
elif line.find('test pass') != -1:
do something
elif line.find('test fail') != -1:
do something
and so on ...
一些“标志”只出现一次(尽管我不知道文件中的位置或顺序),所以我使用“找到”变量来缩短对这些“标志”的检查。其他信息出现了数千次,所以我不能在我的条件下使用“找到”变量。 我知道的一件事是,如果每一行包含一个“标志”,则最多只有一个标志。考虑到这些信息,有没有更有效的方法来解决这个问题?
【问题讨论】:
-
我会首先在您的代码上运行 Python 分析器以找出性能瓶颈所在。 https://docs.python.org/2/library/profile.html。用结果修改您的问题,我们可以从那里开始工作。
-
我认为您使用
elif语句是对标志执行短路测试的最有效方式。 -
您做了很多额外的工作,因为对于您失败的每个标志,您都会再次解析 整个 行。
-
in明显快于str.find。 -
我将代码改为in,但没有看到明显的改进
标签: python performance file if-statement for-loop