在大型二进制文件(2 GB 或更大)中使用正则表达式搜索字符串

Joh*_*Doe 5 python regex binary python-2.7

使用正则表达式在大型二进制文件(2 GB 或更大)中搜索(多个)字符串的最佳方法是什么。

二进制数据只是“原始”数据(如内存转储),并且字符串不受限制。

我可以通过逐行读取文件来在大型文本文件中执行此操作。我想我需要以块的形式读取文件,但是存在边界风险(匹配位于块边界上)

如何搜索二进制数据。

非常感谢一个简短的例子。

编辑:我没有看到相似之处。我根本不清楚

dwa*_*son 1

read()接受一个值,该值用数字表示有多少个字符(字节?多字节字符总是让我感到困惑),因此您可以分块读取它,尽可能合理地保存,并使用正则表达式进行检查。当空间成为一个问题时,在阅读下一个块之前,也许只删除你所读内容的开头。这取决于至少对正则表达式的长度进行一些猜测,或者更确切地说,对其上限进行猜测。如果您想要匹配的正则表达式包含的内容超出了您一次可以在内存中容纳的数量,那么我就没有主意了。

s = ""
SOME_CHUNK_SIZE = 4096 ## 4kb, totally arbitrary
with open("large_file", "rb") as fh:
    if len(s) > SOME_BIG_NUMBER:
        s = s[SOME_CHUNK_SIZE:]
    s += fh.read(SOME_CHUNK_SIZE)
    ## do regex test now
Run Code Online (Sandbox Code Playgroud)

这或许应该能让你有所收获。您还需要知道何时到达文件末尾,因为它似乎不会抛出错误,它只返回 0 字节。您可以读入临时字符串并检查长度,也可以尝试检查文件统计信息并使用SOME_CHUNK_SIZE.