巨大的纯文本数据文件
我使用 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/