【发布时间】:2013-03-07 02:01:35
【问题描述】:
我正在处理一个 500MB 的文件。使用re.search时处理时间增加。
请找出我测试过的以下案例。在所有情况下,我都在逐行读取文件并且只使用一个if 条件。
案例1:
prnt = re.compile(r"(?i)<spanlevel level='7'>")
if prnt.search(line):
print "Matched"
out_file.write(line)
else:
out_file.write(line)
读取整个文件需要 16 秒。
案例2:
if re.search(r"(?i)<spanlevel level='7'>",line):
print "Matched"
out_file.write(line)
else:
out_file.write(line)
读取文件需要 25 秒。
案例3:
if "<spanlevel level='7'>" in line:
print "Matched"
out_file.write(line)
else:
out_file.write(line)
读取文件仅需 8 秒。
请你们中的任何人知道这三种情况之间的区别。 Case3 的处理速度非常快,但我无法进行不区分大小写的匹配。如何在 Case3 中进行不区分大小写的匹配?
【问题讨论】:
-
一般来说,当你不需要正则表达式时,不要使用它。正则表达式通常比字符扫描或 indexOf 更昂贵
-
您使用的是 Python 2 语法,但用
python-3.x标记了它。它是什么,python 2 还是 3? -
@MartijnPieters 我正在使用 python 2.7
-
最快的方法可能是克隆
fastsearch后面的str.find的C实现,修改为不区分大小写,构建ifind扩展模块,然后针对文件的mmap运行它。但这是很多工作。除非有人已经完成并将其发布在 PyPI 上,或者这对您的工作非常重要,否则您的“案例 1”或 Martijn Pieters 的答案可能就足够了,对吧?