Python:正则表达式跨文件块边界匹配

Jod*_*dyK 6 python regex boundary

巨大的纯文本数据文件

我使用python读取了一个巨大的文件块.然后我在那个块上应用正则表达式.基于标识符标记,我想提取相应的值.由于块大小,块边界处缺少数据.

要求:

  • 必须以块的形式读取该文件.
  • 块大小必须小于或等于1 GiB.


Python代码示例

identifier_pattern = re.compile(r'Identifier: (.*?)\n')
with open('huge_file', 'r') as f:
    data_chunk = f.read(1024*1024*1024)
    m = re.findall(identifier_pattern, data_chunk)
Run Code Online (Sandbox Code Playgroud)


块数据示例

好:与值数相等的标签数

标识符:值
标识符:值
标识符:值
标识符:值


由于块大小,您会遇到如下所列的不同边界问题.第三个标识符返回一个不完整的值,"v"而不是"value".下一个块包含"alue".这会导致解析后丢失数据.

错误:标识符值不完整

标识符:值
标识符:值
标识符:v


你如何解决像这样的块边界问题?

Jac*_*ack 3

假设这就是您的确切问题,您可能只需调整正则表达式并逐行读取(这不会将完整文件加载到内存中):

import re
matches = []
identifier_pattern = re.compile(r'Identifier: (.*?)$')
with open('huge_file') as f:
    for line in f:
        matches += re.findall(identifier_pattern, line)

print("matches", matches)
Run Code Online (Sandbox Code Playgroud)