gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:57:19 26 4
gpt4 key购买 nike

巨大的纯文本数据文件

我使用 python 分块读取了一个巨大的文件。然后我对该 block 应用正则表达式。基于一个标识符标签,我想提取相应的值。由于 block 大小,数据在 block 边界处丢失。

要求:

  • 文件必须分块读取。
  • block 大小必须小于或等于 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)


block 数据示例

标签数量等于值数量

Identifier: value
Identifier: value
Identifier: value
Identifier: value


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

差:标识符值不完整

Identifier: value
Identifier: value
Identifier: v


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

最佳答案

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

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)

关于Python:跨文件 block 边界的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44212183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com