我可以在没有file.read()的情况下提取二进制文件的一部分吗?

时间:2017-02-25 10:56:51

标签: python-3.6

我从二进制文件中提取ascii头文件。它似乎不是一个固定的大小,所以我不能依靠精确的字节偏移来提取这个标题。根据我的收集情况,标题从第一次出现\x0a\x23开始,到此后的第一个\x00\x00结束。所以我只是阅读每个文件并应用正则表达式来提取我想要的东西。

在没有实际读取文件的情况下,有更快的方法吗? (现在,我看到的唯一改进就是将读数限制在一个足够大的固定大小,以确保我得到标题但不读取整个文件,但这看起来并不是一个巨大的改进)

注意:我会读取数十(甚至数百甚至)数千个文件,因此欢迎使用任何微优化来尽可能快地编写代码。

这是我的代码:

import re

# Header starts at the first \x0a\x23 occurrence and ends at the first following \x00\x00
HEADER_RE = re.compile(b'(\x0a\x23.+?)\x00\x00', re.DOTALL)

def get_header(file_path):
    with open(file_path, 'rb') as file:
        data = file.read() #TODO: read only the first x bytes: file.read(x)
    try:
        header = HEADER_RE.search(data).group(0)
    except AttributeError:
        header = b''
    return header

0 个答案:

没有答案