使用正则表达式搜索大型二进制文件(2 GB或更多)中的(多个)字符串的最佳方法是什么。
二进制数据只是'原始'数据(如内存转储),字符串不受限制。
我可以通过逐行读取文件在大文本文件中执行此操作。 我想我需要以块的形式读取文件,但是存在边界风险(匹配位于块边界)
如何搜索二进制数据。
非常感谢一个简短的例子。
编辑: 我没有看到相似之处。这对我来说并不清楚
答案 0 :(得分: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
那可能会让你有所帮助。你还需要知道你何时在文件末尾,因为它似乎没有抛出错误,它只返回0个字节。您可以读取临时字符串并检查长度,也可以尝试检查文件统计信息并使用SOME_CHUNK_SIZE
进行算术运算。