我希望使用正则表达式搜索大型文本文件,并设置以下代码:
import re
regex = input("REGEX: ")
SearchFunction = re.compile(regex)
f = open('data','r', encoding='utf-8')
result = re.search(SearchFunction, f)
print(result.groups())
f.close()
当然,这不起作用,因为re.search
的第二个参数应该是字符串或缓冲区。但是,我不能将所有文本文件插入到字符串中,因为它太长(意味着它将需要永远)。有什么替代方案?
答案 0 :(得分:7)
检查每一行的模式是否匹配。这不会将整个文件加载到内存中:
for line in f:
result = re.search(SearchFunction, line)
答案 1 :(得分:5)
您可以将内存映射文件与mmap模块一起使用。可以把它想象成一个伪装成字符串的文件(或者与StringIO相反)。您可以在Doug Hellman的Python Module of the Week article about mmap中找到一个例子。