加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:48:03 所属栏目:Python 来源:网络整理
导读:使用正则表达式在大型二进制文件(2 GB或更多)中搜索(多个)字符串的最佳方法是什么. 二进制数据只是“原始”数据(如内存转储),字符串不受限制. 我可以通过逐行读取文件在大文本文件中执行此操作. 我想我需要以块的形式读取文件,但是存在边界风险(匹配位于块边
使用正则表达式在大型二进制文件(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进行算术运算.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读