Python:在流中搜索字符串的有效方法

时间:2019-08-08 12:25:18

标签: python

鉴于该流为aaa BOUNDARY bbbb BOUNDARY ...,我想要的是:

>>> read_until(stream, b' BOUNDARY ')
b'aaa'
>>> read_until(stream, b' BOUNDARY ')
b'bbbb'

边界小于100字节,流数据是无限的,每秒的兆字节速率很高。该解决方案在内存和时间方面需要高效,而不是天真地窥视和读取BufferedReader

我正在寻找一个简短的解决方案,可能利用标准库或广泛使用的纯Python包。有emailcgi库,它们可以从流中读取多部分的块,这看起来像我所需要的,但是我不明白如何提取此功能。

或者,最好是像BufferedReader这样的带有可搜索缓冲区的东西。

最后的办法是手动实施,但是感觉就像发明了轮子。

1 个答案:

答案 0 :(得分:1)

这是您需要使用的算法:Knuth–Morris–Pratt_algorithm

我在网上找到了此实现:link