在大型二进制文件(2 GB或更多)中使用regex搜索字符串

在大型二进制文件(2 GB或更多)中使用regex搜索字符串,第1张

概述使用正则表达式在大型二进制文件(2 GB或更多)中搜索(多个)字符串的最佳方法是什么. 二进制数据只是“原始”数据(如内存转储),字符串不受限制. 我可以通过逐行读取文件在大文本文件中执行此 *** 作. 我想我需要以块的形式读取文件,但是存在边界风险(匹配位于块边界) 我该如何搜索二进制数据. 非常感谢一个简短的例子. 编辑: 我没有看到相似之处.这对我来说并不清楚 read()接受一个值,该值表示有多 使用正则表达式在大型二进制文件(2 GB或更多)中搜索(多个)字符串的最佳方法是什么.

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

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

我该如何搜索二进制数据.

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

编辑:
我没有看到相似之处.这对我来说并不清楚

解决方法 read()接受一个值,该值表示有多少个字符(字节?多字节字符总是让我感到困惑),所以你可以用块读取它,保存尽可能合理,用你的正则表达式检查.由于空间成为一个问题,可能只删除您在下一个块读取之前已阅读的内容的开头.这取决于至少有一些猜测作为正则表达式的长度,或者更确切地说,是它的上限.如果你想要匹配的正则表达式包含的内存数量超过你在内存中的数量,那么我就没有想法了.

s = ""SOME_CHUNK_SIZE = 4096 ## 4kb,totally arbitrarywith 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进行算术运算.

总结

以上是内存溢出为你收集整理的在大型二进制文件(2 GB或更多)中使用regex搜索字符串全部内容,希望文章能够帮你解决在大型二进制文件(2 GB或更多)中使用regex搜索字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存