使用正则表达式在大型二进制文件(2 GB或更多)中搜索(多个)字符串的最佳方法是什么.
二进制数据只是“原始”数据(如内存转储),字符串不受限制.
我可以通过逐行读取文件在大文本文件中执行此操作.
我想我需要以块的形式读取文件,但是存在边界风险(匹配位于块边界)
我该如何搜索二进制数据.
非常感谢一个简短的例子.
编辑:
我没有看到相似之处.这对我来说并不清楚
解决方法
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进行算术运算.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。