需要使用一组不同命名的正则表达式来解析一组行。
每一行都通过每个正则表达式,直到找到匹配项。 找到匹配项后,代码应为每一行返回/生成(命名为正则表达式、值)对。
文件大小超过 2GB,因此我正在寻找一些提高解析器速度的想法。
目前代码是通过 python 执行的,但这部分可以更改。 一种选择是将所有内容都转换为 C,以从 PCRE 和更快(?)IO 获得更快的速度,但这是一条缓慢的路线,将来很难维护。
我正在寻找实用的解决方案,例如:
- 将解析器转换为一些更快的语言
- 转向 cython (?)
- 将文件分成多个 block 并在几个线程之上运行
请您参考如下方法:
首先,我不会担心切换到另一种语言。替代策略可能会产生更大的 yield 。无论如何,python 使用的正则表达式引擎是用 C 编写的 (iirc)。
- “优化”正则表达式可能是您的第一项任务。如何做到这一点取决于您的文本和表达方式。有一个look用于文章和示例。 @ThomasH 也提出了一个很好的观点。
- 优化正则表达式的最简单方法是删除它;看看是否有机会切换到其他测试,例如
x in y或line.endswith()等 - 尝试使用 pypy 运行您的代码.它可以在不修改代码的情况下提高性能。在您的情况下,虽然 yield 可能微不足道,因为性能与您的正则表达式和文件 io 的性能相关。
- 跨多个线程/进程并发处理文件可能是有益的。我建议使用一个进程来读取文件并将行推送到多个进程从中拉出的队列。有很多方法可以做到这一点。看看http://effbot.org/zone/wide-finder.htm#a-multi-processor-python-solution
