使用正则表达式在大型二进制文件(2 GB 或更大)中搜索(多个)字符串的最佳方法是什么。
二进制数据只是“原始”数据(如内存转储),字符串不受限制。
我可以通过逐行读取文件来在大文本文件中执行此操作。 我想我需要分块读取文件,但是存在边界风险(匹配位于 block 边界上)
如何搜索二进制数据。
非常感谢一个简短的例子。
编辑: 我没有看到相似之处。我一点也不清楚
最佳答案
read()
取一个值,该值是多少个字符的数字指示(字节?多字节字符总是让我感到困惑),因此您可以分块读取它,尽可能节省合理的时间,检查你的正则表达式。随着空间成为一个问题,也许在你阅读下一个 block 之前只删除你读过的内容的开头。这取决于至少有一些猜测作为正则表达式的长度,或者更确切地说,是它的上限。如果您要匹配的正则表达式包含的数量超过您一次可以在内存中拥有的数量,那么我就没主意了。
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
这应该可以帮助您。您还需要知道何时到达文件末尾,因为它似乎并没有引发错误,它只是返回 0 个字节。您可以读入一个临时字符串并检查长度,或者您可以尝试检查文件统计信息并使用 SOME_CHUNK_SIZE
进行算术运算。
关于python - 在大型二进制文件(2 GB 或更多)中使用正则表达式搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29052510/